我想知道如何正确合并这些JS if / else语句?
if (window.addEventListener) { window.addEventListener('dosomething', foo, false); }
else { document.addEventListener('dosomething', foo, false); }
if (window.attachEvent) { window.attachEvent('dosomething', foo); }
else { document.attachEvent('dosomething', foo); }
编辑我
原始代码是:
if (window.attachEvent) { window.attachEvent('dosomething', foo); }
else if (window.addEventListener) { window.addEventListener('dosomething', foo, false); }
else { document.addEventListener('dosomething', foo, false); }
现在,我想添加
document.attachEvent('dosomething', foo);
这里。
编辑II
原来,“document.addEventListener”/“document.attachEvent”是多余的,所以我会把它留给
if (window.addEventListener) { window.addEventListener('dosomething', foo, false); }
else if (window.attachEvent) { window.attachEvent('dosomething', foo); }
谢谢大家!
答案 0 :(得分:1)
两个条件执行不同的任务,您不应加入它们。不过,您可能需要查看javascript ternary operator to lessen your code.
答案 1 :(得分:1)
您不希望“合并”这些if语句。你正在检查两个完全不同的东西,即使它们是相关的。我强烈建议你不要。
答案 2 :(得分:1)
原始代码看起来没问题,但最好先检查window.addEventListener
,因为这是标准的DOM Events接口。 attachEvent
仅应用作9之前的IE版本的后备版。
我不知道您在检查window
和document
上的方法时所做的工作。如果方法存在于其中,则必然存在于另一方,因此您的额外选项将永远不会发生。
如果既没有window.addEventListener
也没有window.attachEvent
,那么您使用的是古老的浏览器或有限的(例如手机)浏览器。这些都不会在document
上使用相同的方法;如果它们完全支持事件,那么你只能使用旧式window.onsomething= function() {...};
样式事件进行绑定。
答案 3 :(得分:0)
保持原样。
如果你真的想改进你的代码,可以使用一个可以处理所有浏览器统一事件的js库(即jQuery)。
答案 4 :(得分:0)
您可以使用||
operator将其缩短为:
(window.addEventListener || document.addEventListener)('dosomething', foo, false);
(window.attachEvent || document.attachEvent)('dosomething', foo);
这是有效的,因为表达式expr1 || expr2
的计算方法如下:
如果可以转换为true,则返回
expr1
;否则,返回expr2
。因此,当与布尔值一起使用时,||如果任一操作数为true,则返回true;如果两者都为假,则返回false。
答案 5 :(得分:0)
不建议在JS中制定if / else语句,如
if (foo) {
bar();
} else {
bla();
}
避免使用分号插入问题?