2010-04-18 19 views
-1

我想知道如何正確合併這些JS if/else語句?如何合併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

「合併」是什麼意思?你的問題很不明確。 – 2010-04-18 12:39:22

+0

請解釋你正在尋找什麼結果。你期望的結果是什麼? (「合併在這裏不明確) – Richard 2010-04-18 12:40:08

+0

嗨!我是新來的,想將兩個語句合併爲一個:if window.addEventListener window.addEventListener else document.addEventListener。如果不支持addEventListener,請嘗試窗口。 attachEvent else document.attachEvent ...希望有幫助;-) – babs 2010-04-18 12:45:29

回答

1

原始代碼看起來不錯,但最好首先檢查window.addEventListener,因爲這是標準DOM Events界面。 attachEvent只能用作9之前的IE版本的後備。

我不知道你在檢查windowdocument上的方法。如果該方法存在於其中一個,它將必然存在於另一個上,所以您的額外選項將永遠不會發生。

如果既沒有window.addEventListener也沒有window.attachEvent,您使用的是古老的瀏覽器或有限的(例如手機)瀏覽器。這兩種方法在document上都沒有相同的方法;如果他們支持所有事件,只能使用舊式window.onsomething= function() {...};風格事件進行綁定。

+0

@bobince,謝謝你的建議!所以,如果我理解你是正確的,那麼「document.addEventListener」根本就不需要? – babs 2010-04-18 13:48:04

+0

我不知道,這取決於「something」事件是否是它應該綁定在'window'或'document'上,在少數情況下可能會有綁定到兩者的原因,但是你不能通過嗅探用於綁定事件的方法來告訴EventTarget會觸發什麼事件,因爲這將始終存在 – bobince 2010-04-18 14:02:54

+0

「事件」事件旨在「load」和「onload」在這裏...... – babs 2010-04-18 14:20:13

0

讓它們保持原樣。

如果你真的想改善你的代碼使用一個js庫,可以處理所有瀏覽器(即jQuery)的統一事件。

1

你不想「合併」這些if語句。你正在檢查兩件完全不同的事情,即使它們是相關的。我強烈要求你不要。

0

可以使用|| operator,以縮短到這一點:

​​

這工作,因爲表達expr1 || expr2如下評價:

返回expr1如果能夠轉化爲真實的;否則,返回expr2。因此,當與布爾值一起使用時,||如果任一操作數爲真,則返回true;如果兩者都是假的,則返回false。

+0

投票的原因是什麼? – Gumbo 2010-04-18 12:55:19

+0

我沒有投票,我懷疑有一種傾向,「這些陳述不應該被合併!'你提供了一個辦法去做什麼不該做的事 – 2010-04-18 13:03:50

+0

你能解釋爲什麼不應該這樣做嗎 – babs 2010-04-18 13:06:20

0

不是要制定在JS if/else語句像

if (foo) { 
    bar(); 
} else { 
    bla(); 
} 

避免插入分號問題的建議嗎?