我目前在页面上有多个选择,这些选择是使用jquery通过ajax
调用动态添加的。
我遇到的问题是,除非我在标签中使用onchange
,例如
<select id="Size" size="1" onchange="onChange(this);">
这有效,但是我想知道是否有一种方法可以让它由jquery分配。我曾尝试在$('select').change(onChange($(this));
的通常位置使用$(document).ready
,但这没用。
我已经尝试在ajax调用之后添加具有bind的事件,但这也不起作用。
分配事件的任何更好的方法?
我有类似的问题,找到了此解决方案here:
[当您执行类似操作时:
$('p').click( function() { alert('blah'); } )
所有当前存在'p'元素将具有点击处理程序附上。现在,如果您继续添加他们页面上的其他“ p”元素不会将您的点击处理程序附加到它们。你会需要“重新运行”
$('p').click( function() { alert('blah'); } )
关于新元素的附加他们的处理程序。
您可能想看看"LiveQuery" plugin按原样管理所有新添加的元素,以便它们得到先前附加的处理程序添加时附加到他们到页面。
卡尔·陆克文
因此,在添加选择项之后,您将不得不重复change()调用。
$('select')。change(onChange($(this));
您需要了解调用函数和将其作为对象传递之间的区别。函数是JavaScript中的一流对象,它们与其他任何对象一样都是对象,因此它们可以存储在变量中,作为参数传递给其他函数,等等。
您拥有的代码将调用onChange函数,并将结果提供给jQuery的change函数。你不要那样这个想法是将函数本身传递给jQuery的change函数,并且jQuery在适当的时候调用它。
[在函数名称后加上括号-()-,然后调用它。否则,您会将其视为对象。因此,您的[[intend可以这样完成:
$('select').change(onChange);
$('#newSelect').change(
function()
{
onChange(this)
}
);
如果所有选择都具有相同的类,则最好先取消绑定,然后重新绑定:
$('.classname').unbind("change"); $('.classname').change( function() { onChange(this) } );
我将事件分配给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)
});
});