2011-01-04 11 views
36

Po prostu chcę wyłączyć możliwość kliknięcia elementu przez użytkownika dla pewnych warunków. Oto niektóre z kodu pracuję z:jquery - wyłącz kliknięcie

 $('#navigation a').bind('click',function(e){ 

    var $this = $(this); 
    var prev = current; 

    current = $this.parent().index() + 1; // store the position in current 

    if (current == 1){ 
    $("#navigation a:eq(1)").unbind("click"); // i want to disable the ability to click this element if current is 1 
    } 
    if (current >= 2){ 
    $("#navigation a:eq(1)").bind("click"); // this is wrong, but I want to rebind the click if current is greater than 1. 
    } 

}

Odpowiedz

71

Jeśli używasz wersji jQuery 1.4.3+:

$('selector').click(false); 

Jeśli nie:

$('selector').click(function(){return false;}); 
+13

Czy istnieje sposób, aby przełączać wyłączenie funkcji kliknięcia zamiast przedefiniowanie go? –

20

przy założeniu, że używasz zdarzeń kliknięcia, po prostu go usuń.

przykład

if (current = 1){ 
    $('li:eq(2)').unbind("click"); 
} 

EDIT: Czy obecnie wiążących zdarzenie click do listy gdzieś? Na podstawie powyższego komentarza zastanawiam się, czy to naprawdę jest to, co robisz? W jaki sposób włączasz kliknięcie? Czy to tylko zakotwiczenie (tag <a>)? Nieco bardziej jednoznaczne informacje pomogą nam odpowiedzieć na twoje pytanie.

UPDATE:

Czy trochę zabawy z: eq (operator). http://jsfiddle.net/ehudokai/VRGfS/5/

Tak, jak powinienem się spodziewać, to operator indeksowany na bazie 0. Więc jeśli chcesz włączyć drugiego elementu w swoim wyborze, gdzie wybór jest

$("#navigation a") 

byś po prostu dodać: eq (1) (drugi indeks), a następnie .unbind („kliknięcie”) tak:

if(current == 1){ 
    $("#navigation a:eq(1)").unbind("click"); 
} 

Trzeba to załatwić.

Mam nadzieję, że to pomoże!

+0

Im wiążące kliknięcie w następujący sposób: $ ("# nawigacji a"). Bind ("kliknij", funkcja (e) {tak używam znacznika . – scifirocket

+0

Oh, ok, to bardzo pomaga. naprawdę tak proste, jak dodanie do selektora, myślę, że tak: $ ('# navigation li: eq (2) a'). unbind ('click'); – ehudokai

+0

@scifirocket: Oczywiście myliłem się, ale jeśli widzisz moją aktualizację powyżej, przetestowałem tę odpowiedź :). – ehudokai

5

Można użyć Unbind metodą usunięcia obsługi, który został załączony ...

if (current = 1){ 
    $('li:eq(2)').unbind('click'); 
} 

Można sprawdzić, co można rozpiąć zrobić? Unbind manual

+0

faktycznie, prawdopodobnie potrzebowałem użyć czegoś takiego "$ ('#navigation li: eq (2)'). unbind ("kliknij"), ale to też nie działa, próbuję wyłączyć zdarzenie click do konkretnego elementu listy. – scifirocket

+0

@scifirocket: czy wiążesz wydarzenie click gdzieś w swoim kodzie? A może używasz kotwicy, którą chcesz wyłączyć? – ehudokai

10

Raw Javascript można osiągnąć to samo dość szybko także:

document.getElementById("myElement").onclick = function() { return false; } 
+1

Zakładam, że był to literówka, więc dodałem "#" do selektora jQuery;) –

+0

Chociaż ... '.onclick' nie działa na obiekcie jQuery. Potrzebujesz '[0]' lub '.get (0)'. –

+0

Dzięki! Zwykle używam surowego JS. Pozwól mi edytować. – Ben

Powiązane problemy