javascript
2013-01-03 92 views -1 likes 
-1
var canAssignMultiple="true"; 
var canWithdrawMultiple="true"; 

function onCheckUncheck() 
{ 
    if($(':checkbox[name^="checkedRecords"]:checked').length>0) 
    { 
     $("input[name='checkedRecords']:checked").each(function() 
     { 
      debugger; 
      var canAssign = $(this).attr("canAssign").toLowerCase(); 
      var canWithdraw = $(this).attr("canWithdraw").toLowerCase(); 
      canAssignMultiple= canAssignMultiple && canAssign; 
      canWithdrawMultiple= canWithdrawMultiple && canWithdraw; 
      if (canAssignMultiple == "false") 
       $("#assaignbutton").attr("disabled", "disabled"); 
      else 
       $("#assaignbutton").removeAttr("disabled"); 

      if (canWithdrawMultiple == "false") 
       $("#withdrawbutton").attr("disabled", "disabled"); 
      else 
       $("#withdrawbutton").removeAttr("disabled"); 
     }); 
    }   
    else 
    { 
     $("#assaignbutton").attr("disabled", "disabled"); 
     $("#withdrawbutton").attr("disabled", "disabled"); 
    } 
} 

可變canAssignMultiple是變真當每個()函數被稱爲第二時間儘管其值已更改爲虛假在第一iteration.It應保留其值evrytime環路runs.How去做這個?變量不更新其值

+0

恐怕字符串'「false」'是真的。也許你在HTML中使用'canAssign = false'? –

+0

你的意思是'canAssignMultiple'成爲字符串''true''嗎? – LarsH

+1

正如Jan提到的那樣,請向我們展示一個HTML樣本,以便我們可以看到'canAssign'屬性的值。 – LarsH

回答

0

boolean(假,真)值比strings( 「假」, 「真」)

不同的嘗試在那裏進行了更改,

+0

您的解釋很好。不過,恐怕你的解決方案還不夠。 –

0

正如其他人指出

var canAssignMultiple = true; 
var canWithdrawMultiple = true; 

function onCheckUncheck() { 
    if ($(':checkbox[name^="checkedRecords"]:checked').length > 0) { 
     $("input[name='checkedRecords']:checked").each(function() { 
      debugger; 
      var canAssign = $(this).attr("canAssign").toLowerCase() == "true"; // make this a boolean expression 
      var canWithdraw = $(this).attr("canWithdraw").toLowerCase() == "true"; // make this a boolean expression 
      canAssignMultiple = canAssignMultiple && canAssign; 
      canWithdrawMultiple = canWithdrawMultiple && canWithdraw; 
      if (canAssignMultiple === false) $("#assaignbutton").attr("disabled", "disabled"); // use false (instead of "false") 
      else $("#assaignbutton").removeAttr("disabled"); 
      if (canWithdrawMultiple === false) $("#withdrawbutton").attr("disabled", "disabled"); // use false (instead of "false") 
      else $("#withdrawbutton").removeAttr("disabled"); 
     }); 
    } 
    else { 
     $("#assaignbutton").attr("disabled", "disabled"); 
     $("#withdrawbutton").attr("disabled", "disabled"); 
    } 
}​ 

左評論,字符串"true""false"的功能與布爾值truefalse的功能不同。如果您嘗試在if語句中使用字符串或使用邏輯運算符(如&&),則字符串將轉換爲布爾值;並且所有非空字符串都被轉換爲true(即它們是「真理」)。這意味着字符串"false"的工作方式與您期望的方式相反,例如在("false" && x)if ("false") {...}

人去修補你的代碼的方法就是改變這一行

   canAssignMultiple = canAssignMultiple && canAssign; 

canAssign轉換爲布爾在一個明確的和正確的方法:

   canAssignMultiple = canAssignMultiple && (canAssign == "true"); 

然後&&操作將正常工作, canAssignMultiple將保存一個實際的布爾值。

及(如@mdmullinax注意,但我會做不同的)一次canAssignMultiple實際上是一個布爾值,你可以改變你if聲明,這樣對待他們:

if (canAssignMultiple == "false") 

應該成爲

if (!canAssignMultiple) 

與之相似的還有withdraw的東西。

0

你的HTML看起來像這樣嗎?

<input canAssign="false" ...> 
<input canAssign="true" ...> 

如果是這樣,你不能改變的HTML,我建議改變這個:

canAssign = $(this).attr("canAssign").toLowerCase() 

這(從再用布爾上工作):

canAssign = $(this).attr("canAssign") == "true" 

和這個:

if(canAssignMultiple == "false") 

這(因爲它是一個真正的布爾現在):

if(canAssignMultiple) 

如果可以改變HTML,我建議你做它的兼容HTML5的方式。首先,你所有的組成屬性應該以data-爲前綴。您也可以將camelCase更改爲連字符。 JQuery的,加載數據的屬性時,會再perform the conversion從字符串如果可能的話:

<input data-can-assign="false" ...> 
<input data-can-assign="true" ...> 

然後jQuery的會給你你從這個調用想要的布爾:

canAssign = $(this).data("canAssign") 

當然,同樣的修復應該適用於所有其他字符串僞布爾(也不適用於布爾運算符)。

原因是:"false"並不完全是false"false" && x將評估爲x(而不是您所期望的"false")。另一方面,false && x將評估爲false

相關問題