不会触发jquery.keyup.keypress,但会在页面重新加载时调用该函数
为什么以下代码不会在按键时触发,但会在页面上重新加载不会触发jquery.keyup.keypress,但会在页面重新加载时调用该函数,jquery,Jquery,为什么以下代码不会在按键时触发,但会在页面上重新加载 $(document).ready(function(){ $('#weight').keypress(valNum("weight", "weight")); function valNum(number, clas){ var name = $("#"+number).val(); var reg = /^([0-9\-\ \.]{2,6})$/; if(!reg.test(name)){ $(
$(document).ready(function(){
$('#weight').keypress(valNum("weight", "weight"));
function valNum(number, clas){
var name = $("#"+number).val();
var reg = /^([0-9\-\ \.]{2,6})$/;
if(!reg.test(name)){
$("."+clas+" .nogood").show();
$("."+clas+" .good").hide();
}else{
$("."+clas+" .good").show();
$("."+clas+" .nogood").hide();
}
}
})
更改:
$('#weight').keypress(valNum("weight", "weight"));
致:
在前面的语句中,问题是由于
(“权重”、“权重”)
的原因,valNum
函数立即执行。这就是立即调用JS函数的方式,例如func()
。但是,keyup
需要一个回调函数,这正是我们在后一种情况下提供的功能。更改:
$('#weight').keypress(valNum("weight", "weight"));
致:
在前面的语句中,问题是由于
(“权重”、“权重”)
的原因,valNum
函数立即执行。这就是立即调用JS函数的方式,例如func()
。但是,keyup
需要一个回调函数,这正是我们在后一种情况下为它提供的。问题在于,您没有传递函数引用(如您所想),而是将调用valNum(“weight”,“weight”)
的结果传递给.keypress()
函数
如果要使用参数调用现有函数,则需要将其封装在匿名函数中,如下所示:
$('#weight').keypress(function() {
valNum("weight", "weight");
});
您遇到的问题是,您没有向
.keypress()
函数传递函数引用(如您所想),而是调用valNum(“weight”,“weight”)
的结果
如果要使用参数调用现有函数,则需要将其封装在匿名函数中,如下所示:
$('#weight').keypress(function() {
valNum("weight", "weight");
});
与任何其他函数或方法一样,jQuery的
.keypress()
方法接受参数。这是将事件处理程序函数作为参数传递的地方。但是,您所做的是而不是将函数valNum()
作为参数传递;实际上,您正在执行valNum()
函数。任何时候在函数名后面看到()
,都会执行函数。相反,您只需要将valNum()
函数包装在一个匿名的、不执行的函数中:
$('#weight').keypress(function(){
valNum("weight", "weight");
});
语法可能会模糊它,但我们现在传递给.keypress()
方法的参数是:
function(){
valNum("weight", "weight");
}
这是在绑定元素上触发keypress
事件时调用的函数。调用此匿名函数时,它将调用您的valNum()
函数
这解决了您的两个问题:valNum()
不会立即执行,而是响应keypress
事件运行
如果您有任何问题,请告诉我——这涉及到JavaScript中一些非常重要的主题。与任何其他函数或方法一样,jQuery的
.keypress()
方法接受一个参数。这是将事件处理程序函数作为参数传递的地方。但是,您所做的是而不是将函数valNum()
作为参数传递;实际上,您正在执行valNum()
函数。任何时候在函数名后面看到()
,都会执行函数。相反,您只需要将valNum()
函数包装在一个匿名的、不执行的函数中:
$('#weight').keypress(function(){
valNum("weight", "weight");
});
语法可能会模糊它,但我们现在传递给.keypress()
方法的参数是:
function(){
valNum("weight", "weight");
}
这是在绑定元素上触发keypress
事件时调用的函数。调用此匿名函数时,它将调用您的valNum()
函数
这解决了您的两个问题:valNum()
不会立即执行,而是响应keypress
事件运行
如果您有任何疑问,请告诉我——这涉及到JavaScript中一些非常重要的主题。谢谢,我想我明白了,尽管假设valNum不接受任何参数,这是代码:$('#weight')。按键(valNum);因为在这种情况下,您实际上是将函数作为参数传递给
.keypress()
,而不是执行函数(没有括号),谢谢,我想我明白了,尽管假设valNum不接受任何参数,这是代码:$('#weight')。keypress(valNum);因为在这种情况下,实际上是将函数作为参数传递给.keypress()
,而不是执行函数(没有括号)