4 回答
$('select').change(onChange($(this));
您需要了解调用函数和将其作为对象传递之间的区别。函数是 JavaScript 中的一等对象,它们和其他任何东西一样都是对象,因此它们可以存储在变量中,作为参数传递给其他函数,等等。
您拥有的代码调用 onChange 函数,并将结果提供给 jQuery 的 change 函数。你不想要那个。这个想法是将函数本身传递给 jQuery 的 change 函数,然后 jQuery 在适当的时候调用它。
当您在函数名称之后有括号 - () - 时,您正在调用它。否则,您将其视为对象。所以你打算做的事情可以这样完成:
$('select').change(onChange);
我有一个类似的问题,在这里找到了这个解决方案:
当你做这样的事情时:
$('p').click( function() { alert('blah'); } )
所有当前存在的“p”元素都将附加一个点击处理程序。现在,如果您继续向页面添加其他“p”元素,它们 将不会 附加您的点击处理程序。您需要“重新运行”
$('p').click( function() { alert('blah'); } )
在新元素上附加处理程序。
您可能希望查看 “LiveQuery”插件,因为它管理所有新添加的元素,因此当它们被添加到页面时,它们会获得以前附加的处理程序。
卡尔·路德
因此,在添加选择后,您必须重复 change() 调用。
将选择添加到您的页面后,您需要向其中添加更改事件:
$('#newSelect').change(
function()
{
onChange(this)
}
);
如果您的选择都具有相同的类,最好先取消绑定,然后重新绑定:
$('.classname').unbind("change");
$('.classname').change(
function()
{
onChange(this)
}
);
感谢大家的帮助,答案有效,但不适用于我正在做的事情。我终于用萤火虫弄明白了。我试图在 ajax 完成它之前分配更改事件(我对这个 ajax 东西很陌生,你可能已经注意到了)。
我在 load() 上添加了分配给回调的事件,现在一切正常。
$(this).load('ploc002.php', {JobNumber: JobNumber, Edit: this.id}, function()
{
// The DOM has been changed by the AJAX call
// Now we need to reassign the onchange events
$('select,input').change( function()
{
onChange(this)
});
});