Reputation: 1902
I've got a javascript snippet that displays a widget on my page. There's some links that get output by the script that look like this:
<a href="#" onclick="somefunction()">Link</a>
These links cause some JS to fire. That's great. The problem is the href="#"
and the absence of a "return false;"
at the end of the onclick
attribute.
When I click one of those links, the browser jumps to the top of the document. With the widget positioned close to the bottom of the document, this is no good.
Unfortunately, I have no control over the output of the script.
Using jQuery I can reference these links using $("#wxheader ul li a")
. I tried the following code but it doesn't work:
$(document).ready(function(){
$("#wxheader ul li a").each(function(){
var onclick = $(this).attr("onclick") + "; return false;";
$(this).attr("onclick", onclick );
});
});
I want to write a jQuery function that will change each onclick attribute to append "return false;"
and it has to run after the script has output the content to the page.
Any ideas?
Upvotes: 5
Views: 371
Reputation: 590
Look in to the preventDefault object in jQuery.
http://api.jquery.com/event.preventDefault/
That will allow it to not run initially or also adding the return false in the jQuery click handler. preventDefault might not work in Firefox. I'm not entirely sure.
$("#wxheader ul li a").click(function(){
//do stuff//
return false;
});
This is a test page i made with some ajax functionality on a link for someone trying to override the regular click. this is the functionality I'm talking about it if its what you are looking for.
http://testing.kobbyappiah.com/Design_and_Evolve/ajaxTest.html
Upvotes: 2
Reputation: 29170
You could also use:
<a href="javascript:void(0)" onclick="somefunction()">Link</a>
Upvotes: 2
Reputation: 9216
You should be able to override it in jquery, try this:
$("#wxheader ul li a").each(function(){
$(this).click(function(e) {
e.preventDefault();
});
});
This stops the normal process of the click event.
Fixed, this will effectively stop the browser's default interpretation of the click event
Upvotes: 2
Reputation: 12806
Try this. The trick is to call preventDefault
in the handler, which prevents the default element action from propagating. I hope this helps.
$("#wxheader ul li a").click(function(e){
e.preventDefault();
return false;
});
Upvotes: 4
Reputation: 105914
I'd do it like this
$( '#wxheader ul li a' ).each( function( i, element )
{
// Capture the existing callback function
var originalCallback = element.onclick;
// Now, remove it from the elemnet
element.onclick = null;
// And replace it with our own, which calls the orignal
// with the proper context, and prevents the default
// event action
$(element).click( function( event )
{
event.preventDefault();
originalCallback.call( window );
});
});
Upvotes: 2