2011-01-31 10 views
6

Celem jest wyłączenie wszystkich linków po kliknięciu, a następnie wyłączenie wszystkich linków, dopóki serwer nie wyśle ​​polecenia nie dającego się skasować (używając podobnej metody, która byłaby używana do wyłączenia).jQuery: jak można wyłączyć wszystko w div? ale nadal wszystko jest widoczne?

Tak więc, ponieważ wszystkie linki są w jednym zawierającym div, mogę po prostu tymczasowo wyłączyć to.

Jak miałbym to zrobić?

Odpowiedz

3

Jeśli chcesz po prostu wyłączyć domyślne zachowanie łącza, można użyć kombinacji delegate i event.preventDefault:

$('#container').delegate('a', 'click', function(e) { 
    if (linksDisabled) { 
     e.preventDefault(); 
    } 
}); 

można ustawić linksDisabled (w zakresie dominującej) do true lub false w drugim programy obsługi zdarzeń, jeśli jest to właściwe.

Jeśli te linki prowadzą do jawnych rzeczy, jest to trochę trudniejsze. Najprawdopodobniej najłatwiej byłoby umieścić w każdej procedurze obsługi sprawdzanie if (linksDisabled).

+0

Czy jest zaletą korzystania 'preventDefault()' zamiast 'return false;'? –

+2

@ Lèse majesté Pozwala na kontynuację propagacji. Osobiście uważam to za bardziej intuicyjne. Co więcej, można go wywołać w dowolnym punkcie programu obsługi zdarzeń, a nie tylko na końcu. To nie ma znaczenia tutaj, ale podoba mi się, że mój kod jest spójny. – lonesomeday

+0

To dobra uwaga. Nie pomyślałem o tym. –

2

Spróbuj tego:

$("#YOUR_DIV a").click(function(){ 
return false; 
}) 
+0

Jeśli istnieją inne funkcje obsługi zdarzeń na elementach, może to być wykonane po pozostałych i dlatego nie ma żadnego efektu. – lonesomeday

+0

To może być dobry sposób na wyłączenie linków JavaScript. Potrzebny jest jednak sposób, aby upewnić się, że ten program obsługi zdarzeń został najpierw zwolniony. –