要素をクリックすると要素を開くJavaScriptが書かれています。私は一度に一つのオープンをしたいときは、示された要素を複数開くことができJavaScriptでeTargetが期待通りに機能しない
- :しかし、私は
var menu = document.getElementById(show); if (menuOpen && e.target !== menu){...}
は、これは私がそれをしたいどのように動作しないことができません。
要素の内部をクリックすると閉じます。ボックスの外側をクリックした場合にのみ閉じます。function openBox(button, show){ var menuOpen = false; //to toggle when the button is clicked. // checks the whole document for clicks and then if the element is open it will > // check to see if you have clicked away from it or not. document.addEventListener("click", function(e){ var menu = document.getElementById(show); if (menuOpen && e.target !== menu){ // if elements open and the click event target does not match > menu.style.display = "none"; // we will close it menuOpen = false; } },false); // add an event listner to the button element and then if its clicked stop any > // links an stop bubbling and then change the display style. document.getElementById(button).addEventListener("click", function(e){ var menu = document.getElementById(show); e.preventDefault(); e.stopPropagation(); if (menuOpen){ menu.style.display = "none"; menuOpen = false; } else { menu.style.display = "block"; menuOpen = true; } },false); } openBox("signInButton", "signIn"); openBox("bagButton", "shoppingBag"); openBox("currencyButton", "currencySelect");
http://jsfiddle.net/jamcoupe/9CEGw/
編集:私はにコードを変更し @Felixクリングポスト後:
document.addEventListener("click", function(e){
var menu = document.getElementById(show);
if (menuOpen && (e.target.parentNode !== menu) && (e.target !== menu)){
menu.className = "closedBoxes";
pointer = document.getElementById(arrow).className = "arrowE";
menuOpen = false;
}
},false);
これは、最初の問題を解決しているが、私はまだどのように貼り付けられています1つの時間に1つのボックスだけが開いているようにします。だから、ユーザーがサインインボックスを開いて、currencyChangerをクリックすると、サインインボックスがオフになります。私はそれが閉じ要素内をクリックする
http://jsfiddle.net/jamcoupe/kcF9Z/7/
http://jsfiddle.net/デモを作成してください。一度に 'signIn'、' shoppingBag'、 'currencySelect'のどれかだけを表示したいと思っていますか?ボックスの中に要素があり、クリックされた場合、 'e.target'はボックスを参照するのではなく、その内部の要素を参照することに注意してください。 –
http://jsfiddle.net/jamcoupe/9CEGw/ – jamcoupe
@FelixKling「shoppingBag」が開いていて、その後、「signIn」ショッピングバッグをクリックしたときに閉じます。 – jamcoupe