2010-12-07 71 views
5

我有一个JavaScript片段,它在我的页面上显示一个小部件。有一些链接可以通过脚本输出,如下所示:用jQuery修改onclick事件

<a href="#" onclick="somefunction()">Link</a> 

这些链接会导致一些JS触发。那很棒。问题是href="#"onclick属性末尾没有"return false;"

当我点击其中一个链接时,浏览器跳转到文档的顶部。将小部件放置在文档底部附近时,这并不好。

不幸的是,我无法控制脚本的输出。

使用jQuery我可以使用$("#wxheader ul li a")引用这些链接。我试着下面的代码,但它不工作:

$(document).ready(function(){ 
    $("#wxheader ul li a").each(function(){ 
     var onclick = $(this).attr("onclick") + "; return false;"; 
     $(this).attr("onclick", onclick); 
    }); 
}); 

我想写一个jQuery的功能,这将改变每个onclick属性追加"return false;",它具有运行脚本有输出内容到页面后。

任何想法?

回答

4

的解释试试这个。诀窍是在处理程序中调用preventDefault,这可防止默认元素操作传播。我希望这有帮助。

$("#wxheader ul li a").click(function(e){ 
    e.preventDefault(); 
    return false; 
}); 
+0

大声笑...什么都是反对票? – James 2010-12-07 20:22:01

+0

不知道这些downvotes。想想你的竞争对手不希望你得到信用。你的回应是最快的,它做到了我所需要的。 – Jazzerus 2010-12-07 20:27:23

2

你应该能够覆盖它在jQuery的,试试这个:

$("#wxheader ul li a").each(function(){ 
    $(this).click(function(e) { 
     e.preventDefault(); 
    }); 
}); 

这将停止click事件的正常过程。

修正,这将有效地阻止浏览器的默认点击事件

+0

这是不对的,'each`遍历jQuery的集合,它不绑定click事件。 – 2010-12-07 20:16:23

+0

这不会工作,因为那里没有任何事件! – RobertPitt 2010-12-07 20:17:39

+0

你说得对,我抄了他的代码太快了,编辑修复它。 – 2010-12-07 20:24:57

2

您是否尝试过使用href="javascript:"

2

您还可以使用:

<a href="javascript:void(0)" onclick="somefunction()">Link</a> 
2

我会做这样的

$('#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); 
    }); 
}); 
2

查找到jQuery中的对象的preventDefault。

http://api.jquery.com/event.preventDefault/

,将允许它不运行或开始还增加回报在jQuery的单击处理程序错误。 Firefox中的preventDefault可能不起作用。我不完全确定。

$("#wxheader ul li a").click(function(){ 
    //do stuff// 
    return false; 
}); 

这是一个测试页面,我用链接上的某些ajax功能制作了一个试图覆盖常规点击的人。这是我谈论它的功能,如果它是你正在寻找的。

http://testing.kobbyappiah.com/Design_and_Evolve/ajaxTest.html