2013-02-21 7 views
7

Gdy użytkownik kliknie obraz, chcę, aby onClicks na wszystkich innych obrazach został wyłączony, dopóki moja funkcja nie zostanie zakończona.jak wyłączyć lub włączyć wszystkie opcje onClick dla obrazów na stronie

Obecnie mam ten kod, który je wyłącza:

var eles = document.getElementsByTagName('img'); 
for (var i=0; i < eles.length; i++) 
    eles[i].onclick = false; 

ale nie jestem pewien, w jaki sposób, aby ponownie je włączyć. Próbowałem:

var eles = document.getElementsByTagName('img'); 
for (var i=0; i < eles.length; i++) 
    eles[i].onclick = true; 

Ale nie działa. ktoś ma rozwiązanie tego problemu

+0

Ten problem masz ujawnia fakt, że wiązania kliknij teleskopowe nieprawidłowo. Jeśli masz pełną kontrolę i możesz to zmienić, usuń wszystkie atrybuty 'onclick', a w JS użyj metody' addEventListener' lub użyj struktury, takiej jak jQuery, dla szerszej obsługi przeglądarki. Potem możesz opisać zdarzenia, kiedy będziesz gotowy – naugtur

Odpowiedz

6

Twoje rozwiązanie nie działa, ponieważ usunąłeś swój onClick za pomocą onClick = false. Następnie należy ponownie utworzyć procedurę obsługi zdarzenia onClick.

Jest to prawdopodobnie Twój sposób dodawania zdarzeń onclick, zmieniłem go, aby działał.

<img src="image1.jpg" onclick="when_i_click();"/> 
<img src="image2.jpg" onclick="when_i_click();"/> 

Spróbuj dodać funkcję do swojego kliknięcia, jak powyżej.

Twoja funkcja onclick:

var when_i_click = function(){ 
    alert('image clicked!'); 
} 

ten sposób można wyłączyć twoi onclicks (metoda)

var eles = document.getElementsByTagName('img'); 
for (var i=0; i < eles.length; i++) 
    eles[i].onclick = null; 

ten sposób można ponownie włączyć je (re- dołączyć funkcję do onClick)

var eles = document.getElementsByTagName('img'); 
for (var i=0; i < eles.length; i++) 
    eles[i].onclick = when_i_click; 

Jest to rozwiązanie jQuery jQuery:

Spróbuj użyć unobstructive JavaScript, by nie dodając onclick obsługi zdarzeń w DOM.

<script> 
(function(){ 
    var function_is_finished = false; 
    $('img').on('click',function(event){ 
     if(function_is_finished) { 
      //Do your stuff when someone clicks on Img 
     } 
    }); 
})(); 
</script> 

Gdy funkcja jest zakończona po prostu ustawić function_is_finished do true

+0

co jeśli chcę, aby niektóre parametry zostały wysłane do tej funkcji, czy jest jakiś sposób na zrobienie tego ...? –

+0

resetuje wartość onclick: "eles [i] .onclick = when_i_click;" faktycznie wywołuje funkcję w momencie jej zresetowania? –

+0

Nie, nie ma. – Timmetje

1

onclick to suppposed aby być skierowane do funkcji JavaScript. zamiast onclick spróbuj z.

eles[i].disabled="true" 

i na koniec z powrotem do swojej metody ELES [i] .disabled = "false"

0

ustawiając eles[i].onclick = false; jesteś realokacja zdarzenie onclick do false. powrót do wartości true nie przywraca pierwotnej funkcji. Prawdopodobnie lepiej jest zamiast tego obsługiwać funkcję un-assigning w funkcji event.

0

Zasadniczo ustawiasz elementy "onclick na false i true. to równowartość robi coś jak

<img src=".." onclick="false"/> 

następnie

<img src=".." onclick="true"/> 

Co należy zrobić, to zachowaniu pewnej zmiennej, aby sprawdzić przed, aby zobaczyć, czy można uruchomić funkcję, czy też nie.

locked = false; 
function yourFunction() { 
    if (locked) { 
     locked = true; 
     //... Do what you have to do here 
     locked = false; 
    }; 
} 
1

Jednym rozwiązaniem jest zapisanie poprzednią wartość onclick i przywrócić go:

var disable_all = function() { 
    var eles = document.getElementsByTagName('div'); 
    for (var i=0; i < eles.length; i++) { 
     eles[i].prev_click = eles[i].onclick; // save the previous value 
     eles[i].onclick = false; 
    } 
} 

var enable_all = function() { 
    var eles = document.getElementsByTagName('div'); 
    for (var i=0; i < eles.length; i++) 
     eles[i].onclick = eles[i].prev_click; // restore the previous value 
    };