Использовать JS, который уже загружен, в HTML, загруженном с помощью функции load () jQuery? - PullRequest
3 голосов
/ 23 января 2012

Не уверен, возможно ли это или нет, но я пытаюсь использовать JavaScript, который я загрузил с помощью тега script, когда страница первоначально запрашивалась в динамическом HTML, который был загружен с помощью функции load() jQuery.

Пример: http://jsfiddle.net/3MR43/

Как видно из примера, после нажатия на ссылку во всплывающем окне ссылка идет.Проблема в том, что ссылка должна была быть остановлена, и вы должны были увидеть предупреждение.

Однако, если я вставляю HTML, который загружаю через jQuery, он работает, так что код в порядке.

Ответы [ 5 ]

3 голосов
/ 23 января 2012

Описание

Вам нужен метод jQuery .live() или .on() для привязки событий к динамически создаваемому html.

Выберите .live() или .on() в зависимости от используемой версии jQuery.

.live () Доступно с jQuery 1.3. Прикрепите обработчик событий для всех элементов, которые соответствуют текущему селектору, сейчас и в будущем.

.on () Доступно с jQuery 1.7. Присоедините функцию обработчика событий для одного или нескольких событий к выбранным элементам.

Проверьте мой образец и эту демонстрацию jsFiddle

Пример

... для jQuery.live ()

$('.lang').live("click", function(e) {   
    e.preventDefault();  
    alert('Testing..');        
});

... для jQuery.on ()

$('.lang').on("click", function(e) {   
    e.preventDefault();  
    alert('Testing..');        
});

Дополнительная информация

2 голосов
/ 23 января 2012

Проблема в том, что .click сделает это только для элементов, которые существуют в то время .Если вы хотите сделать это для всех потенциальных будущих элементов, которым будет соответствовать этот селектор, вы хотите использовать on() (delgate() или live() с более старыми версиями jQuery).

0 голосов
/ 23 января 2012

Вы должны использовать функцию on для динамически загружаемых элементов:

    $('.open_lang').click(function(e) {      
    e.preventDefault();    
    $('#popup').load('http://skins.thehabbos.org/pop_up/language.php').css('display', 'block');            
});

$('body').on('click', '.lang', function(e) {    
    e.preventDefault();  
    alert('Testing..');        
});

(live и delegate устарели в JQuery 1.7+, который является версией вашего JSFiddle)

Исправлено JSFiddle

0 голосов
/ 23 января 2012

Вам нужно использовать live для прикрепления обработчиков к элементам, которые загружаются динамически.

Попробуйте, это решит вашу проблему.

$ ('. Lang'). Live ('click ', function (e) {

    e.preventDefault();

    alert('Testing..');

});
0 голосов
/ 23 января 2012

Событие $('.lang').click() должно быть зарегистрировано после создания элемента!

Вам нужен обратный вызов для функции загрузки, чтобы зарегистрировать это.

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