<div>

<span>只允许输入1到50</span> <br>

<input id="multiple_num" value="1">

</div>

<script>
    var doc = document;
    /**** 事件处理机  start ****/
    var EventUtil = {
        //注册
        addHandler: function(element, type, handler) {
            if (!element) return;
            if (element.addEventListener) {
                element.addEventListener(type, handler, false);
            } else if (element.attachEvent) {
                element.attachEvent("on" + type, handler);
            } else {
                element["on" + type] = handler;
            }
        },
        //移除注册
        removeHandler: function(element, type, handler) {
            if (!element) return;
            if (element.removeEventListener) {
                element.removeEventListener(type, handler, false);
            } else if (element.detachEvent) {
                element.detachEvent("on" + type, handler);
            } else {
                element["on" + type] = null;
            }
        }
};
    /*** 只允许输入数字处理函数 -- start --**/
  var multiple_handle = function() {
         var multiElement = doc.getElementById("multiple_num");
        if (!multiElement) {  //如果元素不存在,退出
            return;
        }
        var type = "input";  //默认认为是input ,Firefox浏览器
        if (!!document.all && navigator.userAgent.indexOf('opera') === -1) {
            type = "propertychange"; //如果为IE 则为propertychange事件
        }
        var meValue = multiElement.value;  //取得input的值
         //进行值判断前先移除注册事件,因为IE的propertychange 只要文本框里的属性发生变化
         // propertychange就会触发。导致死循环;先移除事件,处理完后再绑定事件
        EventUtil.removeHandler(multiElement, type, multiple_handle);
        var reg = /^[1-4]\d{1}$|^50$|^[1-9]$/;
        if (!reg.test(meValue)) {
            if (parseFloat(meValue) > 50) {  //大于50则认为是50
                multiElement.value = 50;
            }
            else {
                multiElement.value = multiElement.value.slice(0, -1); //如果输入了非数字。则删除当前的输入
            }
        }
          //处理完后再绑定事件
        EventUtil.addHandler(multiElement, type, multiple_handle);
    }
    /* -end- **/

    /** 注册事件 IE 为propertychange ,FF 为 input**/
    EventUtil.addHandler(doc.getElementById("multiple_num"), "propertychange", multiple_handle);
    EventUtil.addHandler(doc.getElementById("multiple_num"), "input", multiple_handle);
  </script>

posted on 2011-04-06 14:38  ia00.com  阅读(255)  评论(0编辑  收藏  举报