実現したいこと
<style> #contextmenu1 { display: none; position: fixed; left: 0px; top: 0px; width: 200px; height: 180px; border: 1px solid #000; background-color: #fff; border-radius: 5px; } #contextmenu li { cursor: pointer; } #contextmenu2 { display: none; position: fixed; left: 0px; top: 0px; width: 200px; height: 180px; border: 1px solid #000; background-color: #fff; border-radius: 5px; } #contextmenu2 li { cursor: pointer; } </style>
<body onContextmenu="return false;"> <div id="menu" style="width:100px; background-color:bisque; height: 300px;"> <a class="japan" href="#"> <p class="food">焼肉</p> </a> <a class="japan" href="#"> <p class="food">寿司</p> </a> <a class="japan" href="#"> <p class="food">ラーメン</p> </a> </div> <ul id="contextmenu1"> <li>東京</li> <li>大阪</li> <li>名古屋</li> </ul> <ul id="contextmenu2"> <li>アメリカ</li> <li>イギリス</li> <li>フランス</li> </ul> </body>
この中のid属性のcontextmenu1とcontextmenu2を右クリック表示させたいです。
contextmenu1は class="japan" 上で右クリックした際に、contextmenu2 はそれ以外の場所(id="menu"内)で右クリックした際に表示させたいのですが、下記ソースコードではclass="japan"リンク上で右クリックすると、contextmenu1が一度目は表示されず、二度目の右クリックから表示されてしまいます。
一度目の右クリックからcontextmenu1を表示させたいのですが、どのようなソースコードを書けばよいかご教授お願いいたします。
該当ソースコード
<script type="text/javascript"> let menu = document.getElementById('menu'); let japan = document.getElementsByClassName('japan'); let food = document.getElementsByClassName('food'); let conme1 = document.getElementById('contextmenu1'); let conme2 = document.getElementById('contextmenu2'); window.onload = function () { menu.addEventListener('contextmenu', function (e) { if (e.srcElement.className === "food") { conme1.style.left = e.pageX + "px";//メニューをマウスの位置へ移動 conme1.style.top = e.pageY + "px"; conme1.style.display = "block";//メニューを表示 conme2.style.display = "none"; } else { conme1.style.display = "none"; conme2.style.left = e.pageX + "px";//メニューをマウスの位置へ移動 conme2.style.top = e.pageY + "px"; conme2.style.display = "block";//メニューを表示 } document.body.addEventListener('click', function (e) {//body要素をクリックしたときにイベントを発生 conme1.style.display = "none";//右クリックメニューを非表示 conme2.style.display = "none"; }); }); for (let i = 0; i < food.length; i++) { food[i].addEventListener('contextmenu', function (e) {//右クリックイベントを追加 document.getElementById("tokyo").onclick = function () { alert("東京の" + food[i].innerHTML + "です"); } document.getElementById("osaka").onclick = function () { alert("大阪の" + food[i].innerHTML + "です"); } document.getElementById("nagoya").onclick = function () { alert("名古屋の" + food[i].innerHTML + "です"); } }); } } </script>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/27 16:19 編集
2022/06/27 20:42
2022/06/29 12:39