jquery创建了select,并在更改时触发
我似乎无法让这个工作。 我正在使用jquery创建一个html选择,我想要一些代码在其值发生变化时执行。
代码如下:
var firstweddingturn = '400'; $('#weddingturn').change(function() { alert ("Wedding select change triggered!"); //var wedturn = $('#weddingturnselectid').val(); //$('#div3').append('
Wedding turn selected, ' + wedturn + '') }); $(document).ready(function() { var html = []; html[html.length] = ''; var a = firstweddingturn; var b = Number(firstweddingturn) + 16; while (a < b) { // do some code html[html.length] = '' + a + ''; a++; } // end while html[html.length] = ''; $('#div1').append(html.join('')); });
我究竟做错了什么?
您需要使用.delegate()
(或.live()
),因为您要动态添加select。 当您使用.change()
附加onChange处理程序时,它仅附加到现有的匹配元素,而不是稍后添加的元素。 要将事件附加到所有匹配的元素(包括稍后添加到页面中的元素),请使用.delegate()
函数,如下所示:
$('body').delegate('#weddingturn','change', function(){ alert('Wedding select changed to ' + $(this).find('option:selected').val() ); });
但是,正如一些人所指出的那样,只需在将添加到DOM后立即附加事件处理程序即可。 这样,你仍然可以使用
.change()
,你的代码应该运行得更快。
包括这个:
$('#weddingturn').live('change', function() { alert ("Wedding select change triggered!"); //var wedturn = $('#weddingturnselectid').val(); //$('#div3').append('
Wedding turn selected, ' + wedturn + '') });
在你的$(document).ready
并将其更改为使用live
绑定.change()
事件时,该元素尚不存在。 你有2个选择:
- 创建元素后绑定事件( 最简单和推荐的选项 )
- 使用
.delegate()
(或.live()
)告诉jQuery在将事件添加到DOM时将事件绑定到与选择器匹配的任何元素。 如果选择此选项,如果您使用的是最新版本的jQuery> 1.4.2
,则delegate()
是首选方法,因为它比live()
更> 1.4.2
。
你需要使用live
绑定,因为它是在DOM加载后加载的:
$("#weddingturn").live("change", function() { });
另外,我会将它放在$(document).ready
范围内,最好是在加载它的代码之后(仅为了逻辑线性)。
在创建元素之前,您正在连接事件处理程序。
(你可以使用.live()或者你可以只交换操作的顺序)
你正在动态地将select
添加到DOM中,在声明你的事件处理程序时, select
doest不存在所以事件处理程序没有绑定到元素使用.live
将事件处理程序附加到动态添加的元素
$('#weddingturn').live('change',function() { alert ("Wedding select change triggered!"); //var wedturn = $('#weddingturnselectid').val(); //$('#div3').append('
Wedding turn selected, ' + wedturn + '') });
DEMO
jquery live
您正在对尚不存在的选择设置change
function。 将.change
调用移到.append