Javascript 防止违约';我不能在Firefox上工作
我试图阻止A HREF实际打开链接,但执行脚本。我让脚本部分正常工作,但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"); });
$("#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);
}