Javascript 防止违约';我不能在Firefox上工作

Javascript 防止违约';我不能在Firefox上工作,javascript,jquery,cross-browser,Javascript,Jquery,Cross Browser,我试图阻止A HREF实际打开链接,但执行脚本。我让脚本部分正常工作,但Firefox似乎忽略了这一点: $("#permalink a").click(function(id){ $("#newPost").fadeToggle; event.preventDefault(); var id = this.getAttribute('href'); $("#newPostContent").load(id); $("#newPost").show("fast"); });

我试图阻止A HREF实际打开链接,但执行脚本。我让脚本部分正常工作,但Firefox似乎忽略了这一点:

$("#permalink a").click(function(id){
  $("#newPost").fadeToggle;
  event.preventDefault();
  var id = this.getAttribute('href');
  $("#newPostContent").load(id);
  $("#newPost").show("fast");
});

有人可以建议使用跨浏览器脚本来防止默认设置吗?

标准解决方案是从
单击()处理程序返回false
return false
相当于对事件调用
preventDefault()
stopPropagation()
preventDefault()
也足以完成此任务,因此它或
returnfalse
都可以工作

您的问题似乎是语法错误和参数命名错误。我明白了:

  • fadeToggle
    没有括号
  • 函数参数被称为
    id
    ,但您可以调用
    event.preventDefault()
    ;及
  • 你把帖子褪了,然后马上把它展示出来?这将对两个动画进行排队,但没有多大意义。您可能希望以合理的方式将这两件事和
    load()
    链接在一起
因此,这应该是可行的:

$("#permalink a").click(function(event) {
  $("#newPost").fadeToggle();
  var id = this.getAttribute('href');
  $("#newPostContent").load(id);
  $("#newPost").show("fast");
  return false;
});

在本例中,您可以将
return false
自由替换为
event.preventDefault()
,但传播的
click()
事件可能会或可能会导致其他问题,具体取决于您拥有的其他事件处理程序。

您应该能够
返回false

            $("#permalink a").click(function(id){
应该是

            $("#permalink a").click(function(event){
然后

将为您提供正在处理的对象,event.preventDefault()将停止默认操作

通常我返回false;但这会阻止默认操作并停止事件的传播,这可能会对其他事件处理程序产生意想不到的效果。

这始终有效: Firefox需要“事件处理程序”,Chrome不需要。因此,这适用于所有浏览器:

$('#id_obj').click(function(event) {   
     event.preventDefault(event);  
}

“嘿,这边怎么了?”这不是问题所在。问题是.click(function(id){应该是.click(function(event){.”但是不管是什么情况,阻止链接导航最好通过click事件处理程序返回false来完成-事实上,这不是-如果你需要事件正确地传播,那就糟糕了。这是一种更懒惰的方法,需要更少的代码,但preventDefault只做所需的事情(没有默认操作),而没有其他。这是因为karim79和ijw所说的。谢谢karim79!!我有。单击(函数(){event.preventDefault();});在chrome中工作完美,但在firefox中失败。将此更改为.click(function(event){event.preventDefault();});在这两种情况下都工作完美。任何来到这里并盲目接受此建议的人都应该阅读以下内容:“返回回答,等待品味不那么敏锐的提问者。”……事实上,我注意到您传入了'id',但它被属性获取覆盖。更好的是,'id'变量在传入时(虽然我假设您认为它是DOM对象,但它是一个事件obj)和获取attr时(然后,它是一个URI)都不是id。这加上fadeToggle调用中缺少的括号告诉我,在开始指向jQuery库之前,您需要更仔细地阅读您编写的代码。event.preventDefault(event)应该是event.preventDefault()-jquery引用和dom引用都不表示preventDefault方法接受参数。前者可能不相关,因为它是最后触发的dom事件。对我来说,是因为
事件没有传递到click函数中,所以只需将其从
$('id_obj')更改。单击(function(){
$(“#id_obj”)。单击(函数(事件){
完成了操作。将
事件
传递到
预防默认
方法中不会改变任何内容。
$('#id_obj').click(function(event) {   
     event.preventDefault(event);  
}