如何使这个Javascript函数在IE浏览器中工作?

时间:2013-06-17 14:02:07

标签: javascript internet-explorer

此JAVSCRIPT函数的目的是防止用户输入任何字母字符。如果用户输入这些字符,则光标根本不移动并保持在同一位置。但是,如果用户输入数字,光标将移动到下一个位置。

例如,在此文本字段中,我只允许用户输入数字。除IE 8及更早版本外,此方法在所有浏览器中都能正常运行。我在Firefox,Chrome和Safari上测试了它,甚至在Safari模拟器中也没有问题。如果有人指导我,甚至建议我修改我的方法,以便它也可以在IE中正常工作,这将是很大的帮助!谢谢

function AllowOnlyDigit(e) {
     var ev = e || window.event;
     var key = ev.keyCode || ev.which || ev.charCode;

     if (key > 31 && (key < 48 || key > 57)) {
         return false;
     }
     return true;
 }

这就是我调用这个方法的方法:

<input type="text" onkeypress="return AllowOnlyDigit(event)" />

3 个答案:

答案 0 :(得分:1)

我不会在脚本中使用inline javascript而是使用add the event listener。然后,我将使用一个函数来添加跨浏览器事件侦听器(在此示例中为addEvent)。我可能也会以不同的方式对你的AllowOnlyDigit做出不同的做法,但是保留它就可以试试这个。我没有IE8(或任何Windows产品)进行测试,但它应该可以工作。

HTML

<input type="text" />

的Javascript

function addEvent(elem, event, fn) {
    if (typeof elem === "string") {
        elem = document.getElementById(elem);
    }

    function listenHandler(e) {
        var ret = fn.apply(this, arguments);

        if (ret === false) {
            e.stopPropagation();
            e.preventDefault();
        }

        return (ret);
    }

    function attachHandler() {
        window.event.target = window.event.srcElement;

        var ret = fn.call(elem, window.event);

        if (ret === false) {
            window.event.returnValue = false;
            window.event.cancelBubble = true;
        }

        return (ret);
    }

    if (elem.addEventListener) {
        elem.addEventListener(event, listenHandler, false);
    } else {
        elem.attachEvent("on" + event, attachHandler);
    }
}

function AllowOnlyDigit(e) {
    var ev = e || window.event,
        key = ev.keyCode || ev.which || ev.charCode;

    if (key > 31 && (key < 48 || key > 57)) {
        return false;
    }

    return true;
}

addEvent(document.getElementsByTagName("input")[0], "keypress", AllowOnlyDigit);

jsfiddle

答案 1 :(得分:-1)

您可以使用此jquery函数仅启用digites,points,逗号:

$('input').keydown(function(event) {
    // Allow: backspace, delete, tab, escape, and enter
    if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 || event.keyCode == 188 || event.keyCode == 190 || 
         // Allow: Ctrl+A
        (event.keyCode == 65 && (event.ctrlKey === true || event.metaKey)) || 
         // Allow: home, end, left, right
        (event.keyCode >= 35 && event.keyCode <= 39)) {
             // let it happen, don't do anything
             return;
    }
    else {
        // Ensure that it is a number and stop the keypress
        if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105 )) {
            event.preventDefault(); 
        }   
    }

答案 2 :(得分:-1)

您需要将onkeypress换成onkeydown,以便正确取消活动。

<input type="text" onkeydown="return AllowOnlyDigit(event)" />