Есть несколько вещей в игре здесь. Как указывает fiprojects, лучше не делать встроенный JavaScript (некоторые из причин - это только личные предпочтения). Вы закончите повторять себя и затруднять поддержание своего кода (among other reasons). Лучше всего использовать Event Listeners
(ссылка w3schools, не всегда лучший ресурс, но этого достаточно для этого примера). Это очень просто, если вы используете библиотеку JavaScript (jQuery). Но если вы попросили JavaScript-решение, я расскажу, как это сделать в моем ответе.
Во-первых, давайте форматировать код, чтобы сделать его легче читать:
<li class="x">
<a id="1" title="1" href="./test.php?try" class="myLink">
<img id="Button1" src="http://placehold.it/360x240">
<div class="caption" style="color:red">FIRST</div>
</a>
</li>
<li class="x">
<a id="2" title="2" href="./test.php" class="myLink">
<img id="Button2" src="http://placehold.it/360x240">
<div class="caption" style="color:red">SECOND</div>
</a>
</li>
Я только сделал пару изменений здесь. Я удалил JavaScript onclick
. Я создал образ заполнителя (только для моих собственных целей, поскольку у меня нет ваших изображений, вы захотите разместить свои изображения там). И, наконец, я добавил class="myLink"
на ваш <a>
. Это позволит нам более легко ссылаться на ваши ссылки с нашим слушателем событий.
Для JavaScript
<script>
var linksArray = document.getElementsByClassName("myLink");
var myFunction = function(event) {
event.preventDefault();
var href = this.getAttribute("href");
alert('hello ' + href);
window.location = link;
return false;
};
for (var i = 0; i < linksArray.length; i++) {
linksArray[i].addEventListener('click', myFunction, false);
}
</script>
Первая строка создает массив с любыми элементами, которые имеют class="myLink"
. Затем мы проверим этот массив и добавим прослушиватель событий. Прежде чем мы начнем цикл, нам нужно создать вашу функцию.
Чтобы предотвратить действие по умолчанию, которое происходит, когда пользователь нажимает на ссылку, нам необходимо прекратить распространение. Поэтому мы будем использовать event.preventDefault()
. Я также добавил return false;
к функции. Оба предназначены для того, чтобы делать то же самое.
Вместо передачи переменной мы будем использовать this
для получения справки. Мы также будем использовать функцию JavaScript getAttribute
и передать href
. Это повлечет за собой стоимость href
.
Наконец, мы перебираем наш linksArray
. Мы добавляем слушателя событий click
и назначаем myFunction
как callback
. Теперь, когда пользователь нажимает на одно из изображений, эта функция срабатывает.
И here's a working example on JSFiddle.
Ну, первый не отменяет щелчок, поэтому у вас есть состояние гонки. – epascarello
Спасибо за ответ, так как отменить клик? – user1788736
Вы делаете это уже во второй гиперссылке: 'return false' – Neps