Переопределить поведение по умолчанию для объектов link ('a') в Javascript
Я не знаю, возможно ли то, что я пытаюсь выполнить. Я хотел бы переопределить поведение по умолчанию для всех якорных объектов (тег A
) для данной HTML-страницы. Я знаю, что могу пропустить все элементы A
и динамически добавлять вызов onclick
к каждому из них из метода body onload
, но я ищу более абсолютное решение. Мне нужно, чтобы все элементы A
получили назначение onclick
, которое вызывает метод, передающий свойство element href
в качестве аргумента, поэтому следующее:
<a href="#" onclick="location.href='http://domain.tld/page.html'; return false;">
Динамически становится:
<a href="#" onclick="location.href='http://domain.tld/page.html'; return false;" onclick="someMethodName('http://domain.tld/page.html'); return false;">
Как я уже сказал, идеальным способом сделать это было бы как-то переопределить класс Anchor вообще при загрузке документа. Если это невозможно, я прибегну к методу элементов loop-through-all A
(который я уже знаю, как это сделать).
Ответы
Ответ 1
Если вы не хотите перебирать все элементы привязки, вы можете просто использовать делегирование событий, например:
document.onclick = function (e) {
e = e || window.event;
var element = e.target || e.srcElement;
if (element.tagName == 'A') {
someFunction(element.href);
return false; // prevent default action and stop event propagation
}
};
Проверьте приведенный выше пример здесь.
Ответ 2
Использование jQuery:
$(function() {
$("a").click(function() {
return someMethodName($(this).attr('href'));
});
});
function someMethodName(href)
{
console.log(href);
return false;
}
Ответ 3
window.onload = function() {
var anchorElements = document.getElementsByTagName('a');
for (var i in anchorElements)
anchorElements[i].onclick = function() {
alert(this.href);
return false;
}
}
Это про самый простой способ сделать это. Оберните в <script type="text/javascript">...</script>
в головке документа, и он будет работать при загрузке страницы.
Ответ 4
Невозможно переопределить все элементы привязки onlick. Вы можете добавить onclick к телу документа и иметь логику, чтобы увидеть, если четное распространение от элемента привязки, и выполнить событие в этом случае, но это решение может вызвать проблемы, если ваша страница является сложной и не распространяется на клики в некоторых случаях.
Я бы придерживался решения getElementsByTagName, если это возможно.
Ответ 5
Не используйте случай, если вам нужно обработать несколько событий. Используйте вместо строковой композиции, чтобы построить путь к функции, которая должна быть вызвана. Для этого требуется, чтобы прототип добавлялся к вашим элементам "A", которые определяют по умолчанию и строку, которая должна быть составлена. Атрибут данных для элемента должен иметь возможность переопределять значение по умолчанию. По сути, мы просто хотим, чтобы сообщение и действие проходили по умолчанию и были декларированы в разметке декларативно. Указанное действие должно быть опубликовано где-то как API или другая доступная библиотечная функция и может быть вызвана lib ['funName']. Просто дайте ему атрибут, не беспокойтесь о имени или id. Прототип и атрибут будут полезны для debounce, потому что вам придется отказаться.