jQuery选择器不适用于IE7和IE8中的动态创建内容

时间:2011-08-30 15:07:26

标签: javascript jquery internet-explorer

我的网站上有这些元素,这些元素是在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]);         
            }
        });
    });

4 个答案:

答案 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)

答案 2 :(得分:0)

您需要对运行时添加的元素使用live():http://api.jquery.com/live/

答案 3 :(得分:0)

如果您在document.ready内动态添加元素后尝试选择元素,那么它应该可以正常工作。如果您尝试在不存在的情况下选择元素并尝试附加事件处理程序,那么您应该转到live