Как я могу отключить HREF, если выполняется onclick?
у меня есть якорь с иHREF и ONCLICK набор атрибутов. Если нажата и Javascript включен, я хочу, чтобы он только выполнить ONCLICK игнорировать HREF. Аналогично, если Javascript отключен или не поддерживается, я хочу, чтобы он следовал за HREF URL и игнорировать ONCLICK. Ниже приведен пример того, что я делаю, что бы выполнить JS и одновременно перейти по ссылке (обычно выполняется JS, а затем страница изменения):
<A HREF="http://example.com/no-js-login" ONCLICK="yes_js_login()">Log in</A>
какой лучший способ сделать это?
Я надеюсь на ответ Javascript, но я приму любой метод, пока он работает, особенно если это можно сделать с помощью PHP.
Я уже читал "ссылка href выполняет и перенаправляет страницу до того, как функция javascript onclick сможет закончить", но она только задерживает HREF, но не полностью отключить его. Я также ищу что-то гораздо проще.
11 ответов:
вы можете использовать первое не отредактированное решение, если вы сначала поместите return в :
<a href="https://example.com/no-js-login" onclick="return yes_js_login();">Log in</a> yes_js_login = function() { // Your code here return false; }
yes_js_login = function() { // Your code here return false; }Если вы возвращаете false, это должно предотвратить действие по умолчанию (переход к href).
Edit: Извините, что не работает, вместо этого вы можете сделать следующее:
<a href="http://example.com/no-js-login" onclick="yes_js_login(); return false;">Link</a>
просто отключите поведение браузера по умолчанию с помощью
preventDefaultи передатьeventв HTML.
<a href=/foo onclick= yes_js_login(event)>Lorem ipsum</a>yes_js_login = function(e) { e.preventDefault(); }
<a href="http://www.google.com" class="ignore-click">Test</a>С помощью jQuery:
<script> $(".ignore-click").click(function(){ return false; }) </script>С JavaScript
<script> for (var i = 0; i < document.getElementsByClassName("ignore-click").length; i++) { document.getElementsByClassName("ignore-click")[i].addEventListener('click', function (event) { event.preventDefault(); return false; }); } </script>присвоить класс
.ignore-clickчтобы как можно больше элементов вам нравится и щелчки по этим элементам будут игнорироваться
это проще, если вы передаете параметр события следующим образом:
<a href="#" onclick="yes_js_login(event);">link</a>function yes_js_login(e) { e.stopImmediatePropagation(); }
Я решил ситуацию, когда мне нужен шаблон для элемента, который будет обрабатывать альтернативно обычный URL-адрес или вызов javascript, где функция js нуждается в ссылке на вызывающий элемент. В javascript "это" работает как самоназвание только в контексте элемента формы, например, кнопки. Я не хотел кнопку, просто внешний вид обычной ссылки.
примеры:
<a onclick="http://blahblah" href="http://blahblah" target="_blank">A regular link</a> <a onclick="javascript:myFunc($(this));return false" href="javascript:myFunc($(this));" target="_blank">javascript with self reference</a>атрибуты href и onClick имеют одинаковые значения, кроме того, что я добавляю "return false" на onClick, когда это вызов javascript. Наличие "return false" в вызываемой функции не сработало.
Это может помочь. JQuery не требуется
<a href="../some-relative-link/file" onclick="this.href = 'https://docs.google.com/viewer?url='+this.href; this.onclick = '';" target="_blank">этот код выполняет следующие действия: Передайте относительную ссылку на Google Docs Viewer
- получить полную версию ссылка на якорь
this.href- открыть ссылку в новом окне.
Так что в вашем случае это может сработать:
<a href="../some-relative-link/file" onclick="this.href = 'javascript:'+console.log('something has stopped the link'); " target="_blank">
в моем случае, у меня было условие, когда пользователь нажимает на элемент "a". Условие было:
Если в другом разделе было более десяти элементов, то пользователь не должен быть перенаправлен на другую страницу.
Если в другом разделе было менее десяти элементов, то пользователь должен быть перенаправлен на другую страницу.
функциональность элементов " a " зависит от другого компонента. Код внутри события click выглядит следующим образом:
var elementsOtherSection = document.querySelectorAll("#vehicle-item").length; if (elementsOtherSection> 10){ return true; }else{ event.preventDefault(); return false; }
Comments