How to prevent default event handling in an onclick method?

Javascript

Javascript Problem Overview


How to prevent default in an onclick method? I have a method in which I am also passing a custom value

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

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

Javascript Solutions


Solution 1 - Javascript

Let your callback return false and pass that on to the onclick handler:

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

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

To create maintainable code, however, you should abstain from using "inline Javascript" (i.e.: code that's directly within an element's tag) and modify an element's behavior via an included Javascript source file (it's called unobtrusive Javascript).

The mark-up:

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

The code (separate file):

// 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 */
});

Solution 2 - Javascript

In my opinion the answer is wrong! He asked for event.preventDefault(); when you simply return false; it calls event.preventDefault(); AND event.stopPropagation(); as well!

You can solve it by this:

<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();
}

Solution 3 - Javascript

Try this (but please use buttons for such cases if you don't have a valid href value for graceful degradation)

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

Solution 4 - Javascript

You can catch the event and then block it with preventDefault() -- works with pure Javascript

document.getElementById("xyz").addEventListener('click', function(event){
    event.preventDefault();
    console.log(this.getAttribute("href"));
    /* Do some other things*/
});

Solution 5 - Javascript

Just place "javascript:void(0)", in place of "#" in href tag

<a href="javascript:void(0);" onclick="callmymethod(24)">Call</a>

Solution 6 - Javascript

This worked for me

<a href="javascript:;" onclick="callmymethod(24); return false;">Call</a>

Solution 7 - Javascript

You can use:

event.stopPropagation();

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

Solution 8 - Javascript

Several different answers. Even after so many years, the question is still relevant. Therefore, here is the compilation:

// 1
function myFn1 (e, value) {
    console.log('value:', value)
    e.preventDefault();
}

// 2
function myFn2 (value) {
    console.log('value:', value)
    return false;
}

// 3,5,6,7
function myFn3 (value) {
    console.log('value:', value)    
}

// 4
document.getElementById("clicki-1").addEventListener('click', function(event){
    event.preventDefault();
    console.log('value:',this.getAttribute("data-value"));
});

<h3>onclick Attribute</h3>
<div>
  <a href="/hello" onclick="myFn1(event, 42)">Click 1</a>
</div>

<div>
  <a href="/hello" onclick="return myFn2(42)">Click 2</a>
</div>

<div>
  <a href="/hello" onclick="myFn3(42); return false;">Click 3</a>
</div>

<h3>EventListener (addEventListener)</h3>
<div>
  <a href="/hello" id="clicki-1" data-value="42">Click 4</a>
</div>

<h3>onclick Attribute without linkaddress when hovering</h3>
<div>  
  <a href="javascript:;" onclick="event.preventDefault(); myFn3(42)">Click 5</a>
</div>

<div>  
  <a href="javascript:void(0);" onclick="myFn3(42)">Click 6</a>
</div>

<div>  
  <a href="javascript:;" onclick="myFn3(42)">Click 7</a>
</div>

<h5>Set Anchor Hashtag</h5>
<div>  
  <a href="#" onclick="myFn3(42)">Click 8</a>
</div>

I prefer the variant 2 with return false; if it has to go quickly. And otherwise variant 4 (AddEventListener).

Solution 9 - Javascript

Another way to do that is to use the event object inside the attribute onclick (without the need to add an additional argument to the function to pass the event)

function callmymethod(myVal){
    console.log(myVal);
}

<a href="#link" onclick="event.preventDefault();callmymethod(24)">Call</a>

Solution 10 - Javascript

It would be too tedious to alter function usages in all html pages to return false.

So here is a tested solution that patches only the function itself:

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;
}    

This correctly prevents IE6, IE11 and latest Chrome from visiting href="#" after onclick event handler completes.

Credits:

Solution 11 - Javascript

If you need to put it in the tag. Not the finest solution, but it will work.

Make sure you put the onclick event in front of the href. Only worked for my this way.

<a onclick="return false;" href="//www.google.de">Google</a>

Solution 12 - Javascript

Give a class or id to the element and use jquery function unbind();

$(".slide_prevent").click(function(){
		        $(".slide_prevent").unbind();
		      });

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questioncoure2011View Question on Stackoverflow
Solution 1 - JavascriptLinus KleenView Answer on Stackoverflow
Solution 2 - JavascriptWawaView Answer on Stackoverflow
Solution 3 - JavascriptAamir AfridiView Answer on Stackoverflow
Solution 4 - JavascriptAndreas KarzView Answer on Stackoverflow
Solution 5 - JavascriptRafayView Answer on Stackoverflow
Solution 6 - JavascriptPixelomoView Answer on Stackoverflow
Solution 7 - JavascriptGirdacio PereiraView Answer on Stackoverflow
Solution 8 - JavascriptMaik LowreyView Answer on Stackoverflow
Solution 9 - Javascripth3t1View Answer on Stackoverflow
Solution 10 - JavascriptVadzimView Answer on Stackoverflow
Solution 11 - JavascriptMatixView Answer on Stackoverflow
Solution 12 - Javascriptuser46487View Answer on Stackoverflow