2016-08-19 9 views
-1

私は1ページに複数のモーダルのjavascriptイベントハンドラを持っています。目標は、ユーザーがモーダル外をクリックしたときにボックスを閉じることです。Javascriptイベントハンドラ複数ターゲット

1つのページに最大4つのモーダルがあり、2つには3つ、あるものには3つのモーダルが存在する可能性があります。この問題は、2つまたは3つしかない場合に発生します。この機能は、最初のボックスでは機能しますが、3番目のボックスでは機能しません。

ページ上のどのようなモーダルであっても、これを実行する必要があります。

document.onclick = function(event) { 
if (event.target == modal || event.target == modal2 || event.target == modal3 || event.target == modal4) { 
event.target.style.display = "none"; 
} 
} 

https://jsfiddle.net/fastgrowingtrees/w3bo9q29/

+0

デバッグとevent.targetに来ているかどうか確認する必要がありますjsfiddleリンク –

+0

を入力してください:以下のようなif文

<div id="modal">Modal</div> ... <div id="modal4">Modal 4</div> 

チェックを設定しますあなたが3つのモーダルを持っているか、あなたが3つのモーダルをページ上に残すべき場所をswer you – mean

+0

直接オブジェクトの代わりにIDを使用します。存在しないオブジェクトを比較しようとするため、コードが失敗します。オブジェクトを取得する前にIDが存在するかどうかを確認します。 – Shilly

答えて

0

このような何かを試してみてください。モーダルを作成または削除するたびに、そのidをモーダル配列から削除します。すべてのモーダルが同じように扱われるので、initコードを再度コピーしなくてもループすることができます。

元のコードでは、モーダルを追加または削除するときにdocument.onclick関数を編集する必要があるため、ここのキーは実際の要素ではなくIDで処理しています。

var modals = ["myModal_1", "myModal_2", "myModal_3", "myModal_4"]; 
    modals.forEach(function(id, index) { 
     var modal = document.getElementById(id), 
      btn = document.getElementById('m' + id.slice(3)), 
      span = document.getElementsByClassName("close")[index]; 
     btn.onclick = function() { 
      modal.style.display = "block"; 
     } 
     span.onclick = function() { 
      modal.style.display = "none"; 
     } 
    }); 
    document.onclick = function(event) { 
     if (modals.indexOf(event.target.id) !== -1) { 
      event.target.style.display = "none"; 
     } 
    } 
0

ステップ:

document.onclick = function(event) { 
var x=event.target.getAttribute("id"); 
if (x == 'modal' || x == 'modal2' || x == 'modal3' || x == 'modal4') { 
event.target.style.display = "none"; 
} 
} 
関連する問題