简体   繁体   English

按键事件不适用于 addEventListener 函数

[英]keypress event not working with addEventListener Function

I have an input field with ID mobileNumber , it takes only numbers as input so, i have written a function(event handler function) which checks the input.我有一个 ID 为mobileNumber的输入字段,它只需要数字作为输入,所以我编写了一个函数(事件处理函数)来检查输入。 But if you add the function via the addEventListener function it won't work, but if you add via onkeypress attribute it works..但是,如果您通过addEventListener函数添加该函数,它将不起作用,但是如果您通过onkeypress属性添加它,则它起作用..

eg例如

<input type="text" class="insidetxt" placeholder="Mobile Number" name="mobile number" id="mobileNumber">

 //input field;

 var isNumeric =function (event){
     var specialKeys = new Array();
        specialKeys.push(8); //Backspace
        var keyCode = event.which ? event.which : event.keyCode
        var ret = ((keyCode >= 48 && keyCode <= 57) || specialKeys.indexOf(keyCode) != -1);  
        return ret;
  }; 

  //this function check whether the input character is digit or not


 eventObj["isNumeric"] = function (event){
     var specialKeys = new Array();
        specialKeys.push(8); //Backspace
        var keyCode = event.which ? event.which : event.keyCode
        var ret = ((keyCode >= 48 && keyCode <= 57) || specialKeys.indexOf(keyCode) != -1);  
        return ret;
  }; 

//event obj contains the function to check, same functionality 

(function(eventObj){
  var mobileInput =  document.getElementById("mobileNumber");
  mobileInput.addEventListener("keypress", eventObj["isNumeric"], false);
})(eventObj);

If I add the event listener like this the function is called but doesn't restrict the user from entering the characters also;如果我像这样添加事件侦听器,则会调用该函数,但也不限制用户输入字符;

but if I do like this:但如果我喜欢这样:

<input type="text" class="insidetxt" placeholder="Mobile Number" name="mobile number" id="mobileNumber" onkeypress="return isNumeric(event); ">

this works fine这工作正常

Am I doing something wrong in the second way?第二种方式我做错了吗?

Yeah, the second approach is not a best practice.是的,第二种方法不是最佳实践。 Html attribute can be changed or bypassed, so it is better to add event listeners. Html 属性可以更改或绕过,因此最好添加事件侦听器。

got the solution,.. need to prevent the defaultBehaviour when the ret variable is false得到了解决方案,.. 需要在 ret 变量为 false 时阻止 defaultBehaviour

eventObj["isNumeric"] = function(event) { eventObj["isNumeric"] = 函数(事件){

 var specialKeys = new Array();
    specialKeys.push(8); //Backspace
    var keyCode = event.which ? event.which : event.keyCode
    var ret = ((keyCode >= 48 && keyCode <= 57) || specialKeys.indexOf(keyCode) != -1);  
    if(!ret)
        event.preventDefault();

}; };

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM