我的网站上有这些元素,这些元素是在jQuery的document.ready
函数上动态添加的。
问题是我无法使用常规jQuery选择器选择这些元素。 JavaScript在IE9和其他浏览器中运行良好。我认为它不起作用的原因是因为我试图改变的内容是动态添加的。
如何解决此问题?
代码:
$('.dynamic').each(function(index)
{
$('textarea, input[type=radio], input[type=checkbox], select, input[type=text]', this).each(function()
{
var array = $(this).val().split('|||');
var elements = new Array();
var target = String('.dynamic_'+$(this).attr('id'));
$(target).each(function() //this does nothing in ie7 and 8, seems the target selector is messed up :S
{
elements.push($(this));
});
for (val in array)
{
var count = Number(val);
$(elements[count]).val(array[val]);
}
});
});
答案 0 :(得分:6)
我没有看到将javascript定位到IE7或其他任何具体原因 IE8因为我们都在讨论jQuery。我相信真实的 问题与浏览器本身无关,这是对事件的误用 绑定。
您必须使用live()
或delegate()
方法。它们都将事件分配给DOM中已存在的元素和动态创建的元素。
例如:
$(".element").live("click", function() {
//dazzling stuff here
});
与代表:
$('.element').delegate('.context-element', 'click', function() {
//dazzling stuff here
});
我建议您使用deletage()
而不是live()
,因为我在使用live时遇到过一些与某些浏览器中的事件冒泡相关的错误。同样delegate()
也快得多,所以如果你在DOM操作方面处理非常激烈的应用程序,最好使用它。
答案 1 :(得分:3)
如果可能,请使用On()
代替Live()
。
http://www.jquery4u.com/jquery-functions/on-vs-live-review/#.UH24mGmopTg
答案 2 :(得分:0)
您需要对运行时添加的元素使用live():http://api.jquery.com/live/
答案 3 :(得分:0)
如果您在document.ready
内动态添加元素后尝试选择元素,那么它应该可以正常工作。如果您尝试在不存在的情况下选择元素并尝试附加事件处理程序,那么您应该转到live
。