Използване на JS, който вече е зареден, в HTML, зареден чрез функцията load() на jQuery?

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

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

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

Въпреки това, ако поставя HTML, който зареждам чрез jQuery, той работи, така че кодът е наред.


person Josh Foskett    schedule 23.01.2012    source източник


Отговори (5)


Описание

Имате нужда от 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..');        
});

Повече информация

person dknaack    schedule 23.01.2012

Проблемът е, че вашият .click ще го направи само за елементи, които съществуват по това време. Ако искате да го направите за всички потенциални бъдещи елементи, на които този селектор ще съответства, искате да използвате on() (delgate() или live() с по-стари версии на jQuery).

person LoveAndCoding    schedule 23.01.2012

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

Имате нужда от обратно извикване на функцията за зареждане, за да регистрирате това.

person mvrak    schedule 23.01.2012

Трябва да използвате live, за да прикачите манипулатори към елементи, които се зареждат динамично.

Опитайте това, това ще реши проблема ви.

$('.lang').live('click',function(e) {

    e.preventDefault();

    alert('Testing..');

});
person Jashwant    schedule 23.01.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

person gdoron is supporting Monica    schedule 23.01.2012