JavaScript - 避免执行事件的默认操作。 `event.cancelable` vs`event.preventDefault`?
问题描述:
当我不想执行与该事件关联的默认动作,我用JavaScript - 避免执行事件的默认操作。 `event.cancelable` vs`event.preventDefault`?
function listener(e){
if(e.preventDefault) e.preventDefault();
/* Other code */
}
但I have just learnt的事件具有布尔cancelable
。那么,我应该使用这个代码吗?
function listener(e){
if(e.cancelable) e.preventDefault();
/* Other code */
}
我在想:
- 如果
event.preventDefault
是true
,它的真正含义,该事件是取消?也许如果它不可取消,则定义该属性(和true
),但它不是函数;或者它是一个函数,但如果我称之为抛出错误。 - 是否所有浏览器(IE,我正在看你)支持
event.cancelable
?是否有浏览器有方法event.preventDefault
但没有event.cancelable
;或者有方法event.cancelable
但没有event.preventDefault
;或者event.cancelable
并不总是暗示event.preventDefault
被定义,它是一个函数,它不会抛出错误?
答
此:
if (e.preventDefault)
仅仅意味着该事件对象有一个名为 “的preventDefault” 属性。这是一个浏览器功能测试,因为旧版本的IE没有这个功能。相反,在IE中,您将事件对象的属性“returnValue”设置为false
。
因此,您测试“preventDefault”的原因是查看该函数是否可用;如果该属性为空,那么显然不能进行函数调用。所以,当你想阻止默认操作,你的代码应该是这样的:
if (e.preventDefault)
e.preventDefault();
else
e.returnValue = false;
如果“取消”标志是假的,那么这意味着你不能防止默认行为。 “preventDefault”函数仍然存在(如果它通常会),但对于不可取消的事件忽略对其的调用。根本没有必要检查国旗,真的;它通常是特定类型事件的静态特征。
他不能,但乔恩Skeet可以! – gdoron 2013-02-13 19:35:39
@gdoron哈哈我相信你是对的 – Pointy 2013-02-13 19:36:39
@gdoron谁是Jon Skeet? – Oriol 2013-02-13 19:37:07