专注仅在文档加载时触发,而不再一次?
我有一个捣鼓你:http://jsfiddle.net/pneebntd/3/专注仅在文档加载时触发,而不再一次?
$(document).ready(function(){
$('#Address').focusout(ValidateAddress($(this).val(), "address"));
$('#City').focusout(ValidateAddress($(this).val(), "city"));
$('#State').focusout(ValidateAddress($(this).val(), "state"));
$('#Zipcode').focusout(ValidateAddress($(this).val(), "zip/postal code"));
$("#StateList").change(ValidateAddress($(this).val(), "state"));
});
function ValidateAddress(location, label) {
console.info("made it there : " + location + " " + label);
}
这样做的缺点是,我(想)当控制失去了焦点附加的功能,我想运行的事件处理程序(或者当下拉列表更改值时)。
写入的方式会在页面加载时触发,但不会在此之后再次触发。我之前做过这个,但也许只是因为它是星期一,但是......我在这里做错了什么?
此代码
$('#Address').focusout(ValidateAddress($(this).val(), "address"));
电话ValidateAddress
并将其返回值到focusout
,完全相同的方式foo(bar())
电话bar
并将其返回值到foo
。
如果你想给函数focusout
,你必须这样做。例如:
$('#Address').focusout(function() {
ValidateAddress($(this).val(), "address");
});
该代码创建了一个新的匿名函数,并将该函数引用到focusout
。当事件发生时,它会调用您的ValidateAddress
函数。
当你将不是函数的东西传递给事件处理函数设置函数时,jQuery不应该抱怨吗? – 2015-01-26 18:52:09
我发誓,有些日子我甚至不应该触摸键盘。感谢您的支持。 – MetalPhoenix 2015-01-26 18:53:34
@JuanMendes:检查可能不值得的开销。例如,我的猜测是'ValidateAddress'里根本没有'return'。所以调用它会导致'undefined'。所以我们将'undefined'传递给'focusout'。这是一个**很多**,就像调用'focusout'没有任何参数,这应该触发事件。检查将需要使用'arguments'伪数组,如下所示:'if(!handler && arguments.length> 0)'。除了膨胀之外,它们不需要在如此大的库中,在一些使用函数中的'arguments'的引擎上显着*减慢了函数的速度。 – 2015-01-26 18:58:52
阅读[focusout](http://api.jquery.com/focusout/)的文档。 – epascarello 2015-01-26 18:48:12
我想知道为什么有人低估了这个问题。它有一个运行的例子,解释出了什么问题以及预期的行为。仅仅因为这是一个愚蠢的错误,并不是一个坏问题。 – 2015-01-26 18:59:34