Селектор jQuery не работает с динамически создаваемым контентом в IE7 и IE8 - PullRequest
5 голосов
/ 30 августа 2011

У меня есть элементы на моем сайте, которые динамически добавляются в функцию document.ready jQuery.

Проблема в том, что я не могу выбрать эти элементы, используя обычные селекторы 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 ]

6 голосов
/ 30 августа 2011

Я не вижу какой-либо конкретной причины для нацеливания 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, лучше использовать его.

3 голосов
/ 16 октября 2012

Используйте On() вместо Live(), если это возможно.

http://www.jquery4u.com/jquery-functions/on-vs-live-review/#.UH24mGmopTg

0 голосов
/ 30 августа 2011

Если вы пытаетесь выбрать элемент после добавления их динамически внутри document.ready, тогда он должен работать нормально.Если вы пытаетесь выбрать элемент, когда он не существует, и пытаетесь присоединить обработчики событий, тогда вам нужно перейти на live.

0 голосов
/ 30 августа 2011

Вам необходимо использовать live () для элементов, добавленных во время выполнения: http://api.jquery.com/live/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...