Javascript 生成元素时触发jQuery更改事件

Javascript 生成元素时触发jQuery更改事件,javascript,jquery,forms,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

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

var selector    =   $('<select id="myid" />');
selector.append($('<option value>Option Placeholder</value>'));
// attach onChange event to select list 
selector.bind('change', doUpdate(this));
var选择器=$('');
selector.append($('Option Placeholder'));
//将onChange事件附加到选择列表
selector.bind('change',doUpdate(this));
我的问题是每次构建选择列表时都会触发
change
事件。我不确定触发器是如何发生的——我希望它只在发生变化时触发
change
事件

执行此操作时:

selector.bind('change', doUpdate(this));
您希望发生的是绑定事件处理程序以执行
doUpdate
函数,并将
this
作为参数传递

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

您可以简单地执行以下操作:

selector.bind('change', doUpdate);
jQuery将为您处理
this
的值(它将是触发事件的元素),因此您无需将其作为参数传递给函数。

执行此操作时:

selector.bind('change', doUpdate(this));
您希望发生的是绑定事件处理程序以执行
doUpdate
函数,并将
this
作为参数传递

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

您可以简单地执行以下操作:

selector.bind('change', doUpdate);

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

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

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

selector.bind('change', doUpdate);

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

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

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

selector.bind('change', doUpdate);

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

您的事件数组方法错误。对于事件附件,您应该传递函数。在这里执行函数并传递返回值

var selector    =   $('<select id="myid" />');
selector.append($('<option value>Option Placeholder</value>'));
// attach onChange event to select list 
selector.bind('change', function(){ doUpdate(this) });
var选择器=$('');
selector.append($('Option Placeholder'));
//将onChange事件附加到选择列表
bind('change',function(){doUpdate(this)});

您的事件排列方法错误。对于事件附件,您应该传递函数。在这里执行函数并传递返回值

var selector    =   $('<select id="myid" />');
selector.append($('<option value>Option Placeholder</value>'));
// attach onChange event to select list 
selector.bind('change', function(){ doUpdate(this) });
var选择器=$('');
selector.append($('Option Placeholder'));
//将onChange事件附加到选择列表
bind('change',function(){doUpdate(this)});

传递的参数将不是此事件(下拉列表)。所以它会失败,除非修改doUpdate函数,否则它会失败。因为doUpate必须期望下拉列表作为参数。但您的解决方案也是正确的,正确的方法是修改doUpdate,并在+1已通过参数的内部使用该参数将是事件而不是此(下拉列表)。所以它会失败,除非修改doUpdate函数,否则它会失败。因为doUpate必须期望下拉列表作为参数。但您的解决方案也是正确的,正确的方法是修改doUpdate,并在+1已通过参数的内部使用该参数将是事件而不是此(下拉列表)。它会的fail@keyuratcodebins.com我已经通过告诉他们不需要将
这个
作为参数传递来解决这个问题,因为jQuery无论如何都会处理这个问题。这意味着他们需要更改
doUpdate
函数,使其不使用参数,而只使用
this
——没有看到
doUpdate
,我无法真正告诉他们应该是什么样子。传递的参数将是事件而不是这个(下拉列表)。它会的fail@keyuratcodebins.com我已经通过告诉他们不需要将
这个
作为参数传递来解决这个问题,因为jQuery无论如何都会处理这个问题。这意味着他们需要更改其
doUpdate
函数,使其不使用参数,相反,只使用
这个
——没有看到
更新
,我真的无法告诉他们应该是什么样子。只是一些提示:在附加jQuery对象之前,不需要转换要附加到它的内容。此外,您还可以将jQuery函数串在一起。只是一些提示:在附加jQuery对象之前,不需要转换要附加到该对象的内容。此外,还可以将jQuery函数串在一起。