2013-01-07 15 views
7

Mam ten prosty kod. http://jsfiddle.net/borth/BmEZv/ Jeśli klikniesz link raz, działa poprawnie. Jeśli klikniesz go po raz drugi, to nie zadziała. Z powodu załadowania html do html po załadowaniu DOM, próbowałem .on, .bind, .delegate i .live. Żadna z nich nie działa z wyjątkiem .live, które jest przestarzałe (używam jquery 1.7.2).Alternatywa dla jquery live, która może pracować

Czy ktoś może wyjaśnić, dlaczego .live jest jedyną funkcją, która działa i dlaczego inne nie działają (lub jeśli robię coś nie tak z innymi funkcjami).


$(document).ready(function(){ 
    $(".OpenPopup").bind('click', function(e){ 
     alert('test .OpenPopup'); 
     // do something 
     return false; 
    }); 
    $(".EditIcon").bind('click', function(){ 
     alert('test .EditIcon'); 
     // do something 
     $("#ABC").html('<div class="EditIcon OpenPopup" pwidth="800" pheight="500" ptitle="EditText">click here again</div>'); 
    }); 
}); 


<div id="ABC"><div class="EditIcon OpenPopup" pwidth="800" pheight="500" ptitle="EditText">click here</div></div> 
+2

'.On' jest oficjalnym zamiennikiem' .Live' –

+2

odczytać jQuery docs nas do odpowiedzi na 'why' – charlietfl

+0

Dostałem go do pracy z .Na(). Miałem złą składnię. –

Odpowiedz

16
$(document).ready(function(){ 
     $(document.body).on('click', ".OpenPopup", function(e){ 
      alert('test .OpenPopup'); 
      // do something 
      return false; 
     }); 
     $(document.body).on('click', ".EditIcon", function(){ 
      alert('test .EditIcon'); 
      // do something 
      $("#ABC").html('<div class="EditIcon OpenPopup" pwidth="800" pheight="500" ptitle="Edit Text">click here again</div>'); 
     }); 
    }); 
+0

wow Nigdy nie myślałem o tym Wciąż szukam alternatywnego sposobu .live w najnowszej kompilacji jquery.Jestem oficjalne oświadczenie? Dzięki za urywek będę przetestować ten jeden –

+1

Ale jak to celować w to. openpopup, który został kliknięty? – PixMach

+0

'e.target' w module obsługi kliknięcia - [jQuery event.target doc] (https://api.jquery.com/event.target/) –

2

.on() można stosować with or without delegation poniżej jest przykładem na() za pomocą przekazania.

$("#ABC").on('click', ".OpenPopup", function(e){ 

http://jsfiddle.net/BmEZv/1/

+0

To nie działa. Działa na pierwszym kliknięciu zgodnie z oczekiwaniami, ale po drugim kliknięciu rejestruje tylko pierwszy alert za pomocą .on(). $ (". EditIcon"). Bind ("kliknięcie", function() { nie zostaje zwolniony .Próbowałem także z .delegate(). –

+0

@ BrandonOrth czy chcesz, żebym przepisał cały kod dla ciebie ?, wystarczy zmienić drugie wiązanie na 'on()' – Musa

+0

Zmodyfikowałem twój przykład, aby dodać .on() do kliknięcia .EditIcon. Działa. Dziękuję –

0

Po @Dhofca to naprawdę działa. Po prostu pokazuję przykład, który próbowałem z słowem kluczowym "this".

$(document.body).on('click', ".query-result table tr", function() { 
    var el = $(this); 
    el.closest('table').find('tr').removeClass('dotted'); 
    el.addClass('dotted'); 
}); 
Powiązane problemy