Как предотвратить обработку событий по умолчанию в методе onclick? - PullRequest
71 голосов
/ 14 августа 2011

Как предотвратить дефолт в методе onclick? У меня есть метод, в котором я также передаю пользовательское значение

<a href="#" onclick="callmymethod(24)">Call</a>
function callmymethod(myVal){
    //doing custom things with myVal
    //here I want to prevent default
}

Ответы [ 9 ]

84 голосов
/ 14 августа 2011

Пусть ваш обратный вызов вернет false и передаст его обработчику onclick:

<a href="#" onclick="return callmymethod(24)">Call</a>

function callmymethod(myVal){
    //doing custom things with myVal
    //here I want to prevent default
    return false;
}

Для создания обслуживаемого кода, однако, вы должны воздерживаться от использования "встроенного Javascript" (то есть: кода, который находится непосредственно в теге элемента) и изменять поведение элемента с помощью включенного Исходный файл Javascript (он называется ненавязчивый Javascript ).

Наценка:

<a href="#" id="myAnchor">Call</a>

Код (отдельный файл):

// Code example using Prototype JS API
$('myAnchor').observe('click', function(event) {
    Event.stop(event); // suppress default click behavior, cancel the event
    /* your onclick code goes here */
});
36 голосов
/ 24 января 2013

Попробуйте

<a href="#" onclick="callmymethod(24); return false;">Call</a>
32 голосов
/ 15 марта 2013

На мой взгляд, ответ неверный!Он спросил event.preventDefault();, когда вы просто вернете false;он также вызывает event.preventDefault(); И event.stopPropagation();!

Вы можете решить это следующим образом:

<a href="#" onclick="callmymethod(event, 24)">Call</a>
function callmymethod(e, myVal){
    //doing custom things with myVal

    //here I want to prevent default
    e = e || window.event;
    e.preventDefault();
}
10 голосов
/ 19 февраля 2015

Вы можете перехватить событие и затем заблокировать его с помощью protectDefault () - работает с чистым Javascript

document.getElementById("xyz").addEventListener('click', function(event){
    event.preventDefault();
    console.log(this.getAttribute("href"));
    /* Do some other things*/
});
8 голосов
/ 30 апреля 2015

Это сработало для меня

<a href="javascript:;" onclick="callmymethod(24); return false;">Call</a>
8 голосов
/ 01 июля 2014

Просто поместите «javascript: void (0)» вместо «#» в теге href

<a href="javascript:void(0);" onclick="callmymethod(24)">Call</a>
1 голос
/ 15 февраля 2018

Вы можете использовать:

event.stopPropagation();

https://dom.spec.whatwg.org/#dom-event-stoppropagation

0 голосов
/ 11 апреля 2019

Было бы слишком утомительно изменять использование функций на всех html-страницах до return false.

Итак, вот проверенное решение, которое исправляет только саму функцию:

function callmymethod(myVal) {
    // doing custom things with myVal

    // cancel default event action
    var event = window.event || callmymethod.caller.arguments[0];
    event.preventDefault ? event.preventDefault() : (event.returnValue = false);

    return false;
}    

Этоправильно предотвращает посещение IE6, IE11 и последней версии Chrome href="#" после завершения обработчика события onclick.

Кредиты:

0 голосов
/ 14 августа 2014

Присвойте класс или идентификатор элементу и используйте функцию jquery unbind ();

$(".slide_prevent").click(function(){
                $(".slide_prevent").unbind();
              });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...