Я пишу простую HTML-страницу, которая представляет собой список кнопок в таблице, и каждая кнопка является ссылкой на веб-сайт. Я хочу, чтобы при щелчке по кнопке она открывала ссылку в том же окне, и когда вы щелкаете правой кнопкой мыши, ссылка открывается в новом окне.Есть ли способ установить атрибут onContextMenu для всех кнопок на странице HTML?
У меня получилось, что все работает как показано ниже. Хотя он работает, я пытаюсь очистить код, поскольку это выглядит так, как будто это можно сделать более эффективно, хотя я не уверен, как это сделать. Прямо сейчас мне приходится вручную передавать «onContextMenu» на каждую кнопку и дважды выписывать URL-адрес.
Есть ли способ оптимизировать это или очистить код, чтобы быть более читабельным и ремонтопригодным?
<script>
function RightClickFunction(url) {
//alert("You've tried to open context menu");
window.open(url);
return false;
}
</script>
...
...
<tr>
<td><form action="http://amazon.com"><input class="btn" type="submit" value="Amazon" onContextMenu="return RightClickFunction('http://amazon.com');"></form></td>
<td><form action="http://newegg.com"><input class="btn" type="submit" value="Newegg" onContextMenu="return RightClickFunction('http://newegg.com');"></form></td>
</tr>
EDIT:
Здесь работа ведется в одном решении.
<html>
<head>
<script>
var elems = document.querySelectorAll('input.btn');
console.log(elems);
for (var i = 0; i < elems.length; i++) {
console.log(elems[i]);
elems[i].oncontextmenu = function(e) {
return RightClickFunction(this.parentNode.getAttribute('action'));
}
}
function RightClickFunction(url) {
alert("You've tried to open context menu: " + url);
return false;
}
</script>
</head>
<body>
<table>
<tr>
<td><form action="http://amazon.com"><input class="btn" type="submit" value="Amazon"/></form></td>
<td><form action="http://newegg.com"><input class="btn" type="submit" value="Newegg"/></form></td>
</tr>
</table>
</body>
</html>
Вы знакомы с привязкой события? Это поможет вам оптимизировать и очистить код. –