Javascript 生成元素时触发jQuery更改事件
我正在用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
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函数串在一起。