2012-09-13 9 views
6

Tak mam tę listę z pewnym efektem dymku dodanym przez CSS. HTML:Jak zachować atrybuty zawisu podczas wyłączania kliknij

<li><a href="#">Current Period</a> 
    <ul> 
     <li><a href="#">2012</a> 
     <li> a href="#">2011</a> //...you get the point 

CSS:

#nav a:hover { 
    background-color: #fff; 
    color: #333; 
} 

Gdy użytkownik znajdzie się nad obecnym okresie listę dzieci pojawiają się elementy (2012, 2011 ..., które mają własnych dzieci). Mój problem polega na tym, że użytkownicy mogą kliknąć "Bieżący okres". I udało się usunąć kliknięcie dodając klasę do kotwicy tak:

<li><a href="#" class="noclick">Current Period</a> .... 

CSS:

.noclick { pointer-events: none; cursor: default; }

ale to oczywiście usuwa funkcję aktywowania. Chcę utrzymać efekt "unosić", jednocześnie powodując, że przycisk jest nieklikalny (myślałem o javascript, ale chcę bardziej "bezpośredniego" rozwiązania). Doceniam każdą pomoc :)

Odpowiedz

1

w Twoim teście obsługi kliknij, czy element kliknięty ma tę klasę:

$("#nav a").click(function(e){ 
    if ($(e.target).hasClass("noclick")) 
     return false; 

    // your other code here 
}); 

Należy pamiętać, że testując numer target element dla zdarzenia, które nie spowoduje liże na elementach dzieci z pracy.

Lub jeśli klasa "noclick" nie zmienia się dynamicznie, tj.Te „noclick” linki zaczynają jako i zawsze będzie „noclick”, można zmienić tak, że selektor click obsługi nie jest związany z tych poszczególnych elementów:

$("#nav a").not(".noclick").click(function() { ... 
+0

Pierwszy fragment kodu sprawia, że doskonały zmysł i, dla moich celów, idealnie pasuje do ustawy. Dziękuję Ci! Doceniam twoją pomoc :) – Jose

2

Czy próbowałeś?

$('.noclick').unbind('click'); 

lub

$('.noclick').click(function(e){e.preventDefault();}); 

lub

<a href="javascript:void(0);">Text</a> 
+0

Próbowałem wszystkie trzy z nich, ale kliknięcie nadal jest rozpoznawane przez funkcję javascript. Mam przeczucie, że odpowiedź jest tutaj, ale robię coś złego. – Jose

+1

Zauważam komentarz do innej odpowiedzi, w której mówisz, że masz inną funkcję przechwytywania kliknięcia. Tam leży twój problem .. sprzeczna funkcjonalność. Pamiętaj, że nie mam żadnego kontekstu, jak obecnie przechwytywanie tego kliknięcia, ale zakładając, że używasz jquery to prawdopodobnie coś w zakresie '$ ('a'). Click (function() {// stuff}) ;, co oznacza musisz wykonać trochę logiki w tej innej funkcji, która łapie kliknięcia na poziomie globalnym, aby zobaczyć, czy link kliknął na 'hasClass ('noclick')', a jeśli nie robi tego, co chcesz. – chris

+0

To ma sens. Dziękuję, spróbuję tego teraz. – Jose

0

Można użyć klasy noClick aby zapobiec zdarzenia niewykonania

('.noclick').on('click' , function(e) { 
    e.preventDefault(); 
}); 
+0

To wyłącza moją drugą funkcję (która sprawdza, czy został kliknięty element potomny). – Jose

1

Wystarczy zmienić następujący wiersz:

<li><a href="#" class="noclick">Current Period</a> .... 

dla tej jednej

<li><a href="#" class="noclick" onclick="return false;">Current Period</a> .... 

i zmienić następujące CSS:

.noclick { pointer-events: none; cursor: default; } 

dla tej jednej

.noclick { cursor: default; } 

że powinien robić to, co chcesz.

+0

Mam funkcję w tle, która nadal rozpoznaje kliknięcie obiektu. – Jose

0

na .noclick klasy usunąć wskaźnik-events

.noclick { cursor: default; } 

i dodać js do .noclick elementowi

$('.noclick').each(function() { 
    var $this = $(this); 
    $this.hover(function() { 
     // do something... 
    }); 
    $this.click(function() { 
     return false; 
    }); 
}); 
Powiązane problemy