2013-02-21 4 views
7

ユーザーが画像をクリックすると、機能が終了するまで他のすべての画像のonClicksを無効にします。ページ上の画像に対してすべてのonClickを無効または有効にする方法

私は現在、それらを無効にこのコードを持っている:

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

を、私は再びそれらを有効にするかどうかはわかりません。私は試みました:

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

しかし、それは動作しません。誰でもこの問題の解決策があります

+0

あなたが持っているこの問題は、あなたが間違ってハンドラをクリックして結合しているという事実を明らかにしました。あなたがコントロールでき、変更可能な場合は、 'onclick'属性をすべて削除し、JSでは' addEventListener'メソッドを使用するか、より広いブラウザサポートのためにjQueryのようなフレームワークを使用してください。あなたは準備ができているときにイベントをbibndすることができます – naugtur

答えて

6

onClick with onClick = falseを削除したため、ソリューションが動作しません。その後、再度onClickイベントハンドラを作成する必要があります。

これはおそらくonclickイベントを追加するための方法ですが、変更して動作するはずです。

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

上記のようにonclickに関数を追加してみてください。

あなたのonclickの機能:これは、あなたが(あなたの方法)あなたのonclicksを無効にする方法です

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

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

これは、あなたがどのように再度有効にそれらを(再ですonClickに関数を添付)

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

これは、jQueryのソリューションのjQueryのです:

DOMでのonclickイベントハンドラを追加しないことで、unobstructive JavaScriptを使用してみてください。あなたの関数が終了する

<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> 

だけtrue

+0

私はその関数に送信されるいくつかのパラメータが必要な場合、それを行う方法はありますか? –

+0

は、onclick値をリセットします: "eles [i] .onclick = when_i_click;"実際にリセットした瞬間に関数を呼び出すのですか? –

+0

いいえ、そうではありません。 – Timmetje

1

function_is_finishedを設定するJavaScript関数を指していることが、それはsuppposedのonclick。 onclickの代わりに を試してください。

eles[i].disabled="true" 

とバックelesにあなたの方法の最後に[i]は、あなたがfalseonclickイベントを再割り当てしているeles[i].onclick = false;を設定することで、= "false" を

0

を.disabled。 trueに設定しても元の関数には戻されません。代わりに、イベント関数での割り当て解除を処理する方が良いでしょう。

0

基本的に、要素 'onclickfalsetrueに設定しています。 それはあなたが機能を開始したりすることはできませんかどうかを調べるいくつかの変数を維持している何をすべき、その後

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

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

ような何かをすることの同等です。

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

一つの解決策は、onclickの前の値を保存し、それを復元することです:

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 
    }; 
関連する問題