3

此 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)" />
4

3 回答 3

1

我不会使用内联 javascript,而是从脚本中添加事件侦听器。然后,我将使用一个函数来允许添加跨浏览器事件侦听器(在此示例中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 上

于 2013-06-17T14:48:57.157 回答
-1

您可以使用此 jquery 函数仅启用数字、点、逗号:

$('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(); 
        }   
    }
于 2013-06-17T14:05:31.320 回答
-1

您需要交换onkeypressonkeydown以便您可以正确取消事件。

<input type="text" onkeydown="return AllowOnlyDigit(event)" />
于 2013-06-17T14:05:59.277 回答