我有一些这样的jquery代码:
$("#inputMobile").keypress(function(event){
var ew = event.which;
if(48 <= ew && ew <= 57)
return true;
if(65 <= ew && ew <= 90)
return true;
if(97 <= ew && ew <= 122)
return true;
alert("Change your keyboard language to English");
});
$("#inputEmail").keypress(function(event){
var ew = event.which;
if(48 <= ew && ew <= 57)
return true;
if(65 <= ew && ew <= 90)
return true;
if(97 <= ew && ew <= 122)
return true;
alert("Change your keyboard language to English");
});如您所见,主要函数是相同的,但是输入id是不同的,因为我想将它应用到两个输入字段中。
所以我的问题是,我如何将这段代码重构成一个函数块并删除额外的代码呢?
发布于 2022-07-13 04:47:10
回调函数是相同的,所以只需将选择器组合成一个。
$("#inputMobile, #inputEmail").keypress(function(event){
var ew = event.which;
if(48 <= ew && ew <= 57)
return true;
if(65 <= ew && ew <= 90)
return true;
if(97 <= ew && ew <= 122)
return true;
alert("Change your keyboard language to English");
});注意,.which is deprecated。最好使用.key或.code来检查按下了哪个键。您还可以将检查压缩为一个简洁的正则表达式。
$("#inputMobile, #inputEmail").keypress(function(event){
if (/[\da-z]/i.test(event.key)) {
return true;
}
alert("Change your keyboard language to English");
});您还可以考虑使用proper modal instead of alert,即使在英文键盘上也可以按下非字母数字字符。更精确的信息应该是“只允许字母数字字符”之类的信息。
发布于 2022-07-13 04:48:48
const handler = function(event) {
var ew = event.which;
if (48 <= ew && ew <= 57)
return true;
if (65 <= ew && ew <= 90)
return true;
if (97 <= ew && ew <= 122)
return true;
alert("Change your keyboard language to English");
};
["#inputMobile", "#inputEmail"].forEach(selector -> $(selector).keypress(handler));发布于 2022-07-13 04:49:32
function handleKeypress(id){
$(`#${id}`).keypress(function(event){
var ew = event.which;
if(48 <= ew && ew <= 57)
return true;
if(65 <= ew && ew <= 90)
return true;
if(97 <= ew && ew <= 122)
return true;
alert("Change your keyboard language to English");
});
}现在,您可以使用handleKeypress("inputMobile")和handleKeypress("inputEmail")调用它。
希望它能帮上忙
https://stackoverflow.com/questions/72961058
复制相似问题