2014-02-18 74 views
0
if (!errorHasHappened) { 
    info.show(); 
    error.hide(); 
} else { 
    info.hide(); 
    error.show(); 
} 

我不能使用切換。如何簡化此javascript?

我試圖通過函數顯示或隱藏變量,然後執行它,但它並沒有出於某種原因,我得到了一個JS錯誤。

+1

它看起來是約的簡化,因爲它可以得到。 – Cerbrus

+7

*「我無法使用toogle。」*好的,它被稱爲'toggle',但爲什麼不呢?你沒有使用jQuery 1.2,是嗎? –

+2

太糟糕了,它看起來好像可以使用良好toogle –

回答

3

你可以嘗試這樣的事:

info[errorHasHappened?'hide':'show'](); 
error[errorHasHappened?'show':'hide'](); 

但是,這是我能想到的,這使得代碼更短的唯一選擇。

代碼一樣,並不能使它更易於維護,雖然。

+0

這是關鍵;-)這個代碼是爲了解JS的人編寫的,如果有機會,使用advance JS是有意義的。 – IAdapter

7

你可以這樣做,但如果語句更清晰。

爲什麼不使用.toggle這是專爲這種情況?

info[errorHasHappened ? 'hide' : 'show'](); 
error[errorHasHappened ? 'show' : 'hide'](); 
+2

後對方秒內相同的答案,而第一個得到所有的upvotes:/ 競爭是殘酷的SO:P(不過,對於+1作爲快槍手) – Cerbrus

+0

如果我把它與errorHasHappened = FALSE然後用errorHasHappened = false。切換方式如何工作? – IAdapter

1

如果使代碼更短的是你的目標:

errorHasHappened?(info.hide(),error.show()):(info.show(),error.hide()); 

BTW,使代碼更短!==簡化代碼。 IMO ATLEAST ..

1

任何讓感覺是圍繞他們轉,以防止!

if (errorHasHappened) { 
    info.hide(); 
    error.show(); 
} else { 
    info.show(); 
    error.hide(); 
} 
+0

從技術上講,你減少了一個字符的代碼,但這真的應該是一個評論。 – Cerbrus

+0

這很容易維護,因爲你可能會錯過! – Valdas

+0

雖然這是真的,但它並沒有改變這個答案不能回答問題的事實。 – Cerbrus

1

另一種方式:

$("#error").toggleClass(className, errorHasHappened); 
$("#info").toggleClass(className, errorHasHappened); 
+0

結合2個jQuery選擇器。現在的答案是更多的代碼。 – Cerbrus

+0

恐怕我無法將這兩個選擇器與我有限的jquery經驗結合在一起。結合2 **類似的**選擇器是有道理的,我相信。 –

+0

'$(「#error,#info」)' – Cerbrus