2012-02-08 63 views
0

當我點擊一個li-element,其中的class-attribute包含「disabled selected」時,disabled被取值爲「true」,但在調出最後一個if語句之後,該函數被調用。爲什麼布爾函數的值在退出函數之後發生了變化?

var disabled = false; 
    $("li").click(function() { 
     if ($(this).attr("class") == "disabled selected") { 
      disabled = true; 
     } 
    }); 
    if (disabled) { 
     alert("disabled is true"); 
    } 
    if (!disabled) { 
     alert("disabled is false"); 
    } 
+0

如果是具有'如果(禁用)...'在其聲明的代碼?在你的例子中,這些檢查將在遇到它們時立即運行;在onclick函數之前。 – 2012-02-08 10:19:21

+1

您是否可以添加您的html代碼,或者甚至更好,在此處重現錯誤:http://www.jsfiddle.com – Niklas 2012-02-08 10:20:46

+0

您是否在單擊之後顯示'if(!disabled)'塊內部的警報? – nnnnnn 2012-02-08 10:21:00

回答

4

您應該將兩個if語句都移動到點擊處理程序中。

var disabled = false; 
$("li").click(function() { 
    if ($(this).attr("class") == "disabled selected") { 
     disabled = true; 
    } 
    if (disabled) { 
     alert("disabled is true"); 
    } 
    else { 
     alert("disabled is false"); 
    } 
}); 
+0

您是否確定首先如果測試是可以的,並且禁用被設置爲真?嘗試在設置禁用的行之前添加'alert('設置disabled = true')',以驗證它實際上是否正在執行。 – Supr 2012-02-08 10:23:57

+0

它爲我工作。看看這裏:http://jsfiddle.net/BxYd6/ 我的猜測是,你的殘疾人是不是真的在第一個'如果'條件 – 2012-02-08 10:30:10

+0

我很抱歉,但它的工作,感謝您的幫助。 – SamekaTV 2012-02-08 10:35:26

0

該功能在單擊li元素時執行。最初評估腳本時,點擊事件尚未觸發。

1

如果在click事件處理程序之前運行了最後兩個測試,所以disabled的值尚未更改。

1

直到'li'被點擊後纔會調用回調。但是,立即執行前兩個'if'語句。你會想把它們放在回調中。

var disabled = false; 
$("li").click(function() { 
    if ($(this).attr("class") == "disabled selected") { 
     disabled = true; 
    } 
    if (disabled) { 
    alert("disabled is true"); 
    } 
    if (!disabled) { 
    alert("disabled is false"); 
    } 
}); 
0

問題是雙重的。

首先,正如幾張海報所指出的,您需要將這些if測試放入點擊處理程序中。就目前而言,它們在點擊處理程序的作用域之外執行,我懷疑這不是當你希望它們執行時。

其次,如果類字符串是'disabled selected'if ($(this).attr("class") == "disabled selected") {將只給你一個「真值」值。如果班級字符串是'selected disabled'(或'otherClass disabled selected''disabled selected draggable'等),那麼您將獲得作爲比較結果返回的false值。

嘗試:

$("li").click(function() { 
    var i = $(this); //Multiple variables used for better step-line debugging. 
    var hasDisabled = i.hasClass('disabled'); 
    var hasSelected = i.hasClass('selected'); 
    var disabled = false; 
    if (hasDisabled && hasSelected) { 
     disabled = true; 
    } 
    if (disabled) { 
     alert("disabled is true"); 
    } 
    if (!disabled) { 
     alert("disabled is false"); 
    } 
}); 
相關問題