Событие доступа для вызова 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 92

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>
  1. запустите его как есть и обратите внимание, что ссылка не перенаправляет в Google после предупреждения.
  2. затем измените 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.

попробуйте это:

<script>
    $("a").click(function(event) {
        event.preventDefault(); 
    });
</script>
<script type="text/javascript">
$('a').click(function(){
   return false;
});
<script>

добавьте уникальный класс к ссылкам и 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();
});

вы не можете просто удалить атрибут href из тега?

вы можете получить доступ к событию из 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 из метода.

просто!

onclick="blabla(); return false"