2012-08-01 68 views
-2

我試圖用下面的代碼更改按鈕的文本。如果語句永遠不會到達其他部分

// hide unavailable courses 
$("#availability_button").click(function() { 
    $(".availability_red").toggle(); 
     if ($(this).val('Show Unavailable')){ 
      $(this).html('Hide Unavailable'); 
     } else { 
      $(this).html('Show Unavailable'); 
     } 
}); 

按鈕文字在我第一次使用它時會發生變化,但不會再次發生。不知道這是爲什麼,我幾乎達到了我的JS調試知識的極限。

我把一個警報,並證明它永遠不會到達其他路徑。

我在做什麼錯了?

+1

當你傳遞一個參數'.val',它會返回一個jQuery對象,其計算結果始終爲' TRUE'。請參閱文檔以瞭解'.val'的用法:http://api.jquery.com/val/。 – 2012-08-01 17:13:36

+2

你正在使用.val作爲setter,而不是比較的getter。 – jbabey 2012-08-01 17:15:31

+0

如果它永遠不會進入else塊,這是因爲if塊總是計算爲真。 – devundef 2012-08-01 17:16:00

回答

4

它始終計算爲true因爲.val(val)返回jQuery對象和對象是truthy(ToBoolean給出true)值。

此外,您使用的.val()而你可能要檢查的.html()

試試這個:

if ($(this).html() === 'Show Unavailable') { 
    $(this).html('Hide Unavailable'); 
} else { 
    $(this).html('Show Unavailable'); 
} 

演示http://jsfiddle.net/jfetf/

+0

感謝您付出額外的努力並添加jsfiddle。 – bytejunkie 2012-08-02 08:48:02

3

$(this).val("Show Unavailable")被設定值,並返回一個對象,它不是檢查平等。

改爲嘗試$(this).val() == "Show Unavailable"。它將採用當前值並將其與字符串進行比較。

0

$(this).val('Show Unavailable')返回jQuery object這被解釋爲true

而且$(本).VAL(「顯示不可用」)設定值元素...