preventDefault不适用于Firefox
我试图阻止A HREF实际打开链接,但是要执行脚本。 我让脚本部分工作,但似乎Firefox会忽略这个:
$("#permalink a").click(function(id){ $("#newPost").fadeToggle; event.preventDefault(); var id = this.getAttribute('href'); $("#newPostContent").load(id); $("#newPost").show("fast"); });
任何人都可以建议使用跨浏览器脚本来防止默认设置吗?
对此的标准解决方案是从click()
处理程序return false
。 return false
相当于在事件上调用preventDefault()
和stopPropagation()
。 preventDefault()
对于这个任务也是足够的,所以它或者return false
都可以。
您的问题似乎是语法错误和错误命名的参数。 我知道了:
-
fadeToggle
没有括号; - 函数参数被称为
id
但你调用event.preventDefault()
; 和 - 你正在淡化post,然后立即显示它? 这将排队两个动画,但没有多大意义。 您可能希望以合理的方式将这两个事物和
load()
链接在一起。
所以这应该工作:
$("#permalink a").click(function(event) { $("#newPost").fadeToggle(); var id = this.getAttribute('href'); $("#newPostContent").load(id); $("#newPost").show("fast"); return false; });
您可以在此实例中使用event.preventDefault()
自由替换return false
,但传播的click()
事件可能会或可能会导致其他问题,具体取决于您拥有的其他事件处理程序。
这总是有效的:Firefox需要“事件处理程序”,而Chrome则不需要。 所以这适用于所有浏览器:
$('#id_obj').click(function(event) { event.preventDefault(event); }
$("#permalink a").click(function(id){
应该
$("#permalink a").click(function(event){
然后
var id=event.target;
将为您提供正在处理的对象,event.preventDefault()将停止默认操作。
通常我会返回false; 我自己,但这都会阻止默认操作并停止事件的传播,这可能会产生您对其他事件处理程序没有预料到的影响。
你应该只能return false;