2015-01-26 80 views
0

我有一个捣鼓你: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); 
} 

这样做的缺点是,我(想)当控制失去了焦点附加的功能,我想运行的事件处理程序(或者当下拉列表更改值时)。

写入的方式会在页面加载时触发,但不会在此之后再次触发。我之前做过这个,但也许只是因为它是星期一,但是......我在这里做错了什么?

+1

阅读[focusout](http://api.jquery.com/focusout/)的文档。 – epascarello 2015-01-26 18:48:12

+1

我想知道为什么有人低估了这个问题。它有一个运行的例子,解释出了什么问题以及预期的行为。仅仅因为这是一个愚蠢的错误,并不是一个坏问题。 – 2015-01-26 18:59:34

回答

4

此代码

$('#Address').focusout(ValidateAddress($(this).val(), "address")); 

电话ValidateAddress并将其返回值到focusout,完全相同的方式foo(bar())电话bar并将其返回值到foo

如果你想给函数focusout,你必须这样做。例如:

$('#Address').focusout(function() { 
    ValidateAddress($(this).val(), "address"); 
}); 

该代码创建了一个新的匿名函数,并将该函数引用到focusout。当事件发生时,它会调用您的ValidateAddress函数。

+0

当你将不是函数的东西传递给事件处理函数设置函数时,jQuery不应该抱怨吗? – 2015-01-26 18:52:09

+0

我发誓,有些日子我甚至不应该触摸键盘。感谢您的支持。 – MetalPhoenix 2015-01-26 18:53:34

+1

@JuanMendes:检查可能不值得的开销。例如,我的猜测是'ValidateAddress'里根本没有'return'。所以调用它会导致'undefined'。所以我们将'undefined'传递给'focusout'。这是一个**很多**,就像调用'focusout'没有任何参数,这应该触发事件。检查将需要使用'arguments'伪数组,如下所示:'if(!handler && arguments.length> 0)'。除了膨胀之外,它们不需要在如此大的库中,在一些使用函数中的'arguments'的引擎上显着*减慢了函数的速度。 – 2015-01-26 18:58:52

相关问题