如何使用jQuery将正确添加到页面并让更改事件起作用?

问题描述 投票:4回答:4

我目前在页面上有多个选择,这些选择是使用jquery通过ajax调用动态添加的。

我遇到的问题是,除非我在标签中使用onchange,例如

<select id="Size" size="1" onchange="onChange(this);">

这有效,但是我想知道是否有一种方法可以让它由jquery分配。我曾尝试在$('select').change(onChange($(this));的通常位置使用$(document).ready,但这没用。

我已经尝试在ajax调用之后添加具有bind的事件,但这也不起作用。

分配事件的任何更好的方法?

jquery html-select
4个回答
2
投票

我有类似的问题,找到了此解决方案here

[当您执行类似操作时:

$('p').click( function() { alert('blah'); } ) 

所有当前存在'p'元素将具有点击处理程序附上。现在,如果您继续添加他们页面上的其他“ p”元素不会将您的点击处理程序附加到它们。你会需要“重新运行”

$('p').click( function() { alert('blah'); } )

关于新元素的附加他们的处理程序。

您可能想看看"LiveQuery" plugin按原样管理所有新添加的元素,以便它们得到先前附加的处理程序添加时附加到他们到页面。

卡尔·陆克文

因此,在添加选择项之​​后,您将不得不重复change()调用。


7
投票

$('select')。change(onChange($(this));

您需要了解调用函数和将其作为对象传递之间的区别。函数是JavaScript中的一流对象,它们与其他任何对象一样都是对象,因此它们可以存储在变量中,作为参数传递给其他函数,等等。

您拥有的代码将调用onChange函数,并将结果提供给jQuery的change函数。你不要那样这个想法是将函数本身传递给jQuery的change函数,并且jQuery在适当的时候调用它。

[在函数名称后加上括号-()-,然后调用它。否则,您会将其视为对象。因此,您的[[intend可以这样完成:

$('select').change(onChange);

0
投票
将选择添加到页面后,您需要向其中添加更改事件:

$('#newSelect').change( function() { onChange(this) } );

如果所有选择都具有相同的类,则最好先取消绑定,然后重新绑定:

$('.classname').unbind("change"); $('.classname').change( function() { onChange(this) } );


0
投票
感谢大家的帮助,答案奏效了,但不是我在做什么。我终于用萤火虫弄清楚了。我试图在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) }); });

© www.soinside.com 2019 - 2024. All rights reserved.