Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不会触发jquery.keyup.keypress,但会在页面重新加载时调用该函数_Jquery - Fatal编程技术网

不会触发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()
,而不是执行函数(没有括号)