2009-04-24 12 views
12

Oszalałam tylko próbując odłączyć obsługę onclick od zdarzenia w jQuery, dzięki czemu mogę później powiązać ją z inną funkcją.jquery unbind click

mam pojedyncze kodu na stronie testowej, więc nie ma nic, ale z mięsa, po prostu przycisk, który wywołuje funkcję i skrypt stara aby go usunięcie powiązania:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
    <script src="../../Scripts/jquery-1.3.2.min.js" type="text/javascript"> 
    </script> 

    <script src="../../Scripts/jquery-1.3.2.js" type="text/javascript"> 
    </script> 

    <script type="text/javascript" language="javascript"> 
     $(document).ready(function() { $("#btnNext").unbind('click'); }); 
     function hi() {window.alert("hi");} 
    </script> 
</head> 

<body> 

    <input id="btnNext" type="button" value="Next" onclick="hi();" /> 
</body> 
</html> 

Ktoś wie dlaczego kliknięcie Zdarzenie wywołuje funkcję hi() bez względu na to, co powiedziałem w dokumencie.

Dzięki

Odpowiedz

21

Bo go umieścić w atrybutu html, to pozostanie tam. Nie był związany z jQuery, więc jQuery nie śledzi jego użycia.

$("a").bind('click',hi); 
$("a").unbind('click',hi); 

http://docs.jquery.com/Events/bind

+0

Czy myślisz, że wszystko ustawione w trybie deklaratywnym nie może być tak rozwiązane? – antonioh

+3

poprawne, być może uda ci się rozwiązać wiązanie przez $ ("# btnNext"). Attr ('onclick', '') ... ale lepiej zrobić całe twoje powiązanie z jQuery. Jest o wiele czystszy i mniej dezorientujący. Łatwo zapomnieć o javascriptie dodanym w twoich atrybutach. ;) –

+0

Niezły, teraz rozumiem, dlaczego to nie zadziałało. Zrobię to, co mówisz. Dzięki! – antonioh

9

Tylko dla rekordu, można użyć funkcji removeAttr jQuery usunąć wstępnie określone onclick atrybut.

$('#btnNext').removeAttr("onclick"); 

Ponadto, w odpowiedzi na Czadzie, zgadzam się, że jest ogólnie lepiej wykonywać wszystkie twe wiązanie z jQuery, ale jestem w sytuacji (przy użyciu ASP.NET MVC), który wymaga indywidualnych linki mieć jakiś parametry modelu w swoich modułach obsługi zdarzeń kliknięcia. Byłoby bardziej zawiłe IMO, aby spróbować połączyć te programy obsługi zdarzeń za pośrednictwem jQuery.

+0

to nie działa w IE (oczywiście). Ktoś zna sposób na odinstaluj zdarzenia "onclick" w IE? –

0

nie mogłem dostać removeAttr do pracy, ale to robi:

$("#btnNext").click(function(){ return false; }); 

ja chcąc usunąć onclicks ASP.NET dostarczone (tylko dla SelectedNodeChanged) w moim TreeView, więc może obsłużyć wydarzenie na kliencie. Oczywiście funkcja klikania zawierała więcej niż "return false".

0

Powiedzmy masz

$(elem).on("click", function() { ... }); 

nawet nie trzeba go wiązać, jeśli chcesz go rozwiązać później. Aby to zrobić, wystarczy:

$(elem).unbind(); 

i spowoduje to usunięcie procedur obsługi niezależnie od typu. Jeśli chcesz być bardziej szczegółowy, możesz zawsze przekazać typ wydarzenia, np. "Kliknij".

Powiązane problemy