构建元素时触发的jQuery更改事件

时间:2013-01-24 16:36:13

标签: javascript jquery forms

我正在用jQuery构建一些动态选择列表。当它们被更改时,我希望事件触发一个函数来获取数据。

var selector    =   $('<select id="myid" />');
selector.append($('<option value>Option Placeholder</value>'));
// attach onChange event to select list 
selector.bind('change', doUpdate(this));

我的问题是每次构建选择列表时都会触发change事件。我不确定触发器是如何发生的 - 我希望它只会触发change事件,当它发生变化时!

http://jsfiddle.net/TPuwc/

3 个答案:

答案 0 :(得分:3)

执行此操作时:

selector.bind('change', doUpdate(this));

您期望发生的是绑定事件处理程序以执行doUpdate函数,并将this作为参数传递。

这不是正在发生的事情。相反,它正在做的是立即调用doUpdate(this),然后尝试将该函数调用返回的值设置为change事件的事件处理程序。

您可以这样做:

selector.bind('change', doUpdate);

jQuery将为您处理this的值(它将是触发事件的元素),因此您不需要将其作为参数传递给函数。

答案 1 :(得分:1)

您必须了解函数调用和函数引用之间的区别。每个回调都应该作为函数引用(或匿名函数)提供,而不是函数调用。

区别在于函数名后面的括号()

selector.bind('change', doUpdate);

编辑:请务必更新doUpdate功能。它将使用this关键字自动访问触发更改的元素,因此您无需将其作为参数传递。

答案 2 :(得分:1)

您的事件安排方法有误。对于事件附件,您应该传递功能。在这里你正在执行函数并传递返回值。

var selector    =   $('<select id="myid" />');
selector.append($('<option value>Option Placeholder</value>'));
// attach onChange event to select list 
selector.bind('change', function(){ doUpdate(this) });