当我不想执行与事件关联的默认操作时,我使用
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
),但它不是一个函数;或者它是一个功能,但如果我调用它会引发错误。event.cancelable
吗?是否存在具有event.preventDefault
方法但没有event.cancelable
的浏览器;或者方法event.cancelable
但没有event.preventDefault
;或event.cancelable
并不总是暗示event.preventDefault
已定义且它是一个函数并且它不会抛出错误?答案 0 :(得分:4)
此:
if (e.preventDefault)
仅表示事件对象具有名为“preventDefault”的属性。这是一个浏览器功能测试,因为IE的旧版本没有。相反,在IE中,您将事件对象的属性“returnValue”设置为false
。
因此,您测试“preventDefault”的原因是查看该功能是否可用;如果属性为null,则显然无法进行函数调用。因此,当您想要阻止默认操作时,您的代码应如下所示:
if (e.preventDefault)
e.preventDefault();
else
e.returnValue = false;
如果“cancelable”标志为false,则表示无法阻止默认行为。 “preventDefault”函数仍然存在(如果通常是这样),但对于不可取消的事件,将忽略对它的调用。真的没有必要检查旗帜;它通常是特定类型事件的静态特征。