为什么这个javascript onkeypress事件不起作用?

时间:2014-07-30 16:19:18

标签: javascript

我不确定问题是否与我的代码或浏览器有关,我已经尝试了所有我知道的但无法找到解决方案。

这是我的代码:

var postcode = document.getElementById("deliveryPostcode");
    postcode.onkeypress = checkForDigits;

我有一个表单输入,我想阻止用户输入非数字字符。因此,只允许0-9的数字。但是,无论我在文本框中输入什么,我都会收到警报框。我正在使用firefox。

function checkForDigits(keyPressEvent) {
    var keyCode = keyPressEvent.keyCode;
    if (keyCode < 48 || keyCode > 57) {
        alert("Not a digit");
    }
} 

5 个答案:

答案 0 :(得分:2)

onkeypress有一些问题与firefox尝试onkeydown它工作正常

function checkForDigits(keyPressEvent) {
    var keyCode = keyPressEvent.keyCode;
    if (keyCode < 48 || keyCode > 57) {
        alert(keyCode);
    }
} 

var postcode = document.getElementById("deliveryPostcode");
    postcode.onkeydown = checkForDigits;

JsFiddle

答案 1 :(得分:1)

var postcode = document.getElementById("deliveryPostcode");
postcode.onkeyup = checkForDigits;
function checkForDigits(keyPressEvent) {
        var reg = /^\d+$/;
        var val=document.getElementById('deliveryPostcode').value
    if(!reg.test(val))
        alert('not a digit!');
}

答案 2 :(得分:1)

嗯,似乎这可能是问题所在:

  

在按键事件中,按下的键的Unicode值存储在    keyCode charCode 属性,绝不是两者兼而有之。

<强> Source

因此,针对此问题的实际跨浏览器解决方案是查看浏览器使用的keyCodecharCode中的哪一个并相应地阅读。

var postcode = document.getElementById("deliveryPostcode");
postcode.onkeypress = checkForDigits;

function checkForDigits(event) {

    // Selects charCode or keyCode accordingly, based on which exists
    var chCode = ("charCode" in event) ? event.charCode : event.keyCode;

    if (chCode < 48 || chCode > 57) {

        alert("Not a digit");

        // return false means that letter won't be placed to input
        return false;
    }

}

<强> JS FIDDLE EXAMPLE

因此,为了进一步阅读,我建议:keyCode property

干杯。

答案 3 :(得分:0)

我认为这与你的HTML有关。看看这个JSFiddle。它在Chrome中为我工作。

<form>
   <input type="text" name="firstname" id="deliveryPostcode">
</form>

答案 4 :(得分:0)

也许你的id为“deliveryPostcode”的元素不是textarea或输入type = text?

<textarea id="deliveryPostcode">
</textarea>

这是工作示例:http://jsfiddle.net/G9Y6c/