jQuery: 事件: event.preventDefault();,e未定义。

6

嗨,我有一个在锚点的onclick事件上触发的jQuery函数,该函数如下:

function dropDown(subid, e) {
 e.preventDefault();
 var sub = '#' + subid;
 // hide all submenus first
 $('.subnav').css({'display' : 'none'});
 //Show the Current Subnav 
 $(sub).css({'display' : 'block'});
}

这是我尝试触发它的方式:
<a href="#!" onclick="dropDown('sn_cities')" >Cities</a>

然而我遇到了这个错误:e未定义 我想取消锚链接的默认onclick事件,任何帮助都将不胜感激。
2个回答

17

你没有将事件对象(或任何内容)传递给函数的e参数。尝试这样做:

onclick="dropDown('sn_cities',event);"

尽管如此,我倾向于完全删除内联JS:

<a href="#!" data-dropDown="sn_cities">Cities</a>

$(document).ready(function() {

    $("a[data-dropDown]").click(function(e) {
       e.preventDefault();
       // hide all submenus first
       $('.subnav').hide();
       //Show the Current Subnav 
       $('#' + $(this).attr("data-dropDown")).show();
    });

});

0
function dropDown(subid) {
 var sub = '#' + subid;
 // hide all submenus first
 $('.subnav').css({'display' : 'none'});
 //Show the Current Subnav 
 $(sub).css({'display' : 'block'});
}

<a href="#!" onclick="dropDown('sn_cities'); return false;" >Cities</a>

作为一个附注,不建议使用内联JavaScript。为了清晰起见,请将您的脚本放在外部文件中。

谢谢您的回复,我现在会尝试一下。只是好奇,使用jQuery时不能将其他参数与事件一起传递吗? - Amyth
你可以这样做,就像nnnnnn所发布的那样。 - ahren
他调用preventDefault来阻止锚点触发并跳转到“#”链接,你只需要简单地删除它吗? - James
return false; 相当于 preventDefault();stopPropagation(); - ahren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接