2010-06-29 15 views
5

Mam do czynienia z dziwnym problemem, że zdarzenia .click() zdarzają się dwa razy, gdy umieszczone w oknie dialogowym jQuery.Zdarzenia kliknięcia w oknie dialogowym jQuery występują dwukrotnie?

mój prosty przypadek testowy jest poniżej a live example is here

<div id="popup" style="display: none"> 
    <a href="javascript:void(0);" id="testlink">Test Link</a> 
    <script type="text/javascript"> 
     $('#testlink').click(function(){ 
     alert("Test Link clicked"); 
     return 0; 
     }); 
    </script> 
    </div> 
    <script type="text/javascript"> 
    $(document).ready(function(){ 
    $('#popup').css('display','block'); 
    var h=($(window).height()+0.0)*0.9; 
    var w=($(window).width()+0.0)*0.9; 
    if(w >= 800){ 
     w = 800; 
    } 
    $('#popup').dialog({ 
     autoOpen: true, 
     width: w, 
     height: h, 
     modal: true, 
     open: function(event,ui){ 
     $('body').css('overflow', 'hidden'); 
     }, 
     close: function(event,ui){ 
     $('body').css('overflow', 'scroll'); 
     } 
    }); 
    }); 
    </script> 

Odpowiedz

7

Przesuń blok <script> który rejestruje zdarzenia click poza popup div, myślę, że JS pobiera analizowany innym razem, gdy div staje się widoczny ..

+0

Ah, to naprawia to, jak pokazano tutaj: http://jsbin.com/odago/2 – Earlz

+0

Huh. Nie otrzymałem podwójnego połączenia działającego lokalnie z twoją wąską próbką, ale dostałem go na próbkę na żywo działającą na twoim komputerze. Twoja strona z przykładami zawiera również dodatkowe rzeczy. – a7drew

+0

Testowałem to na Chrome, czy to ... –

2

Najczęstszym powodem, dla którego tak się dzieje, jest to, że skrypt jest przetwarzany 2 razy. Jeśli nie jesteś pewien, gdzie to się dzieje lub nie masz czasu na debugowanie, oto prosty sposób obejścia tego problemu.

Chodzi o to, aby usunąć wszystkie aktywne hadlery, zanim zostanie zastosowany nowy hadler.

Jeśli używasz jQuery 1.7 lub nowszego, możesz użyć następującej składni.

$('.selector').off('click').on('click', function() { 
    // your code 
}); 
Powiązane problemy