Событие доступа для вызова preventdefault из пользовательской функции, происходящей из атрибута onclick тега
у меня есть ссылки, как это:
<a href="#" onclick="myfunc({a:1, b:'hi'})" />click</a>
<a href="#" onclick="myfunc({a:3, b:'jo'})" />click</a>
и я хотел бы сделать preventDefault()
внутри myfunc, потому что a #
будут добавлены в адресной строке при нажатии на ссылку
(не делая return false;
или href='javascript:void(0);'
)
это возможно ? могу ли я получить событие внутри myfunc
10 ответов:
Я верю, что вы можете пройти в
event
в функцию inline, которая будетevent
объект для поднятого события в W3C совместимых браузерах (т. е. более старые версии IE по-прежнему требуют обнаружения внутри вашей функции обработчика событий, чтобы посмотреть наwindow.event
).function sayHi(e) { e.preventDefault(); alert("hi"); }
<a href="http://google.co.uk" onclick="sayHi(event);">Click to say Hi</a>
- запустите его как есть и обратите внимание, что ссылка не перенаправляет в Google после предупреждения.
- затем измените
event
перешел вonclick
обработчик к чему-то еще, какe
, нажмите кнопку Выполнить, а затем обратите внимание, что перенаправление происходит после предупреждения (панель результатов становится белой, демонстрируя перенаправление).
самое простое решение просто:
<a href="#" onclick="event.preventDefault(); myfunc({a:1, b:'hi'});" />click</a>
это на самом деле хороший способ сделать перебор кэша для документов с резервным вариантом для браузеров без JS (без перебора кэша, если нет JS)
<a onclick=" if(event.preventDefault) event.preventDefault(); else event.returnValue = false; window.location = 'http://www.domain.com/docs/thingy.pdf?cachebuster=' + Math.round(new Date().getTime() / 1000);" href="http://www.domain.com/docs/thingy.pdf">
Если JavaScript включен, он открывает PDF со строкой запроса перебора кэша, если нет, он просто открывает PDF.
добавьте уникальный класс к ссылкам и javascript, который предотвращает по умолчанию ссылки с этим классом:
<a href="#" class="prevent-default" onclick="$('.comment .hidden').toggle();">Show comments</a> <script> $(document).ready(function(){ $("a.prevent-default").click(function(event) { event.preventDefault(); }); }); </script>
Я думаю, что когда мы используем onClick мы хотим сделать что-то другое, чем по умолчанию. Итак, для всех ваших ссылок с onClick:
$("a[onClick]").on("click", function(e) { return e.preventDefault(); });
вы можете получить доступ к событию из onclick следующим образом:
<button onclick="yourFunc(event);">go</button>
и в вашей функции javascript, мой совет добавляет, что первая строка заявление как:
function yourFunc(e) { e = e ? e : event; }
затем используйте везде e в качестве переменной события
e. preventDefault(); от https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault
или вернуть false из метода.