2011-07-12 18 views
3

首先設置: 的jQuery 1.5.1 火狐4.0Jquery。每個工作不正常,代碼不正確或者有更好的方法可用?

目標: 我已經得到了使用複選框啓用/禁用一堆文本框。如果啓用了文本框,我希望它的值大於零。

HTML的一個箱子(有他們的頁面上的變量數):

<input type="text" value="0" name="RequestList[4].iCount" id="RequestList_4__iCount" class="num-box"> 

我jQuery的使用。每個不工作:

var oneFill = false; 
$('.num-box').each(function() { 
    var myItem = $(this); 
    if (myItem.attr('disabled') == false) { 
     if (myItem.val() > 0) { 
      oneFill = true; 
     } 
    } 
}); 
if (!oneFill) { 

當我在Firebug中追蹤上面的代碼,它不會做任何事情。它繼續到下一行代碼(if(!oneFill))。

當我在Firebug中使用$('。num-box')時,它會返回所有文本框的完整列表。所以我非常有信心,我擁有合適的選擇器。

所以問題是,我做錯了什麼?我在這裏看過很多例子,看來我使用.each是正確的。

但是,是否有一個更有效的方法來檢查所有啓用文本框與類的num-box?

Addition1 @artlung 繼續使用我的上述樣本HTML,我想至少有以下幾點:

<input type="text" value="0" name="RequestList[1].iCount" id="RequestList_1__iCount" class="num-box"> 
<input type="text" value="0" name="RequestList[2].iCount" id="RequestList_2__iCount" class="num-box"> 
<input type="text" value="0" name="RequestList[3].iCount" id="RequestList_3__iCount" class="num-box"> 
<input type="text" value="0" name="RequestList[4].iCount" id="RequestList_4__iCount" class="num-box"> 

的複選框看起來像:

<input type="checkbox" value="true" name="RDEquipListItem[1]" id="RDEquipListItem_1_"> 
<input type="checkbox" value="true" name="RDEquipListItem[2]" id="RDEquipListItem_2_"> 
<input type="checkbox" value="true" name="RDEquipListItem[3]" id="RDEquipListItem_3_"> 
<input type="checkbox" value="true" name="RDEquipListItem[4]" id="RDEquipListItem_4_"> 

我有java腳本,用於在選中相應的複選框時啓用/禁用文本框。

到目前爲止,我已經看到了一些很好的調整我的代碼的肉。我會明天投票給那些人。

我的困惑是,是否有與我的。每個部分的問題:

$('.num-box').each(function() { 

Addition2 我一直在玩一些結果。我目前的代碼如下所示:

var oneFill = false; 
var myEnabled = $('.num-box:enabled'); 
myEnabled.each(function() { 
    var myItem = $(this); 
    if (parseInt(myItem.val()) > 0) { 
     oneFill = true; 
    } 
}); 
if (!oneFill) { 

myEnabled獲取啓用的元素的正確列表。 豎起大拇指

但是,myEnabled.each什麼都不做。

.each使用單個項目是否存在問題?

最終評論 不知道爲什麼這是給我一個問題,但我不得不重新排序邏輯了一下。即使使用Firebug,它也不會進入「.each」代碼,但結果是正確的。最後的代碼(注意:。NUM盒是由複選框啓用/禁用文本框):

//make sure one item has been filled in and all are greater than zero 
var allFilled = true; 
var myEnabled = $('.num-box:enabled'); 
//check that we have at least one item checked out 
if (myEnabled.length == 0) { 
    alert("At least one needs to be filled."); 
    return false; 
} 

$.each(myEnabled, function() { 
    var myItem = $(this); 
    if (parseInt(myItem.val()) <= 0) { 
     allFilled = false; 
    } 
}); 
if (!allFilled) 
{ 
    //go do something 
+0

它對我有用:http://jsfiddle.net/CzNMJ/ – MoarCodePlz

+0

檢查'myItem.attr('disabled')'和' myItem.val()'輸出。 – kei

+0

一件事,如果你檢查值大於0,要分析價值爲數字。所以你想:'(parseInt(myItem.val(),10)> 0)'那部分。 – artlung

回答

2

試試這個

var oneFill = false; 
$('.num-box').each(function() { 
    var myItem = $(this); 
    if (myItem.is(":enabled") && parseInt(myItem.val()) > 0) { 
      oneFill = true; 

    } 
}); 
if (!oneFill) { 
} 
+0

這有助於清理我的代碼,所以我最終得到了Addition 2中的代碼。我決定將啓用的代碼合併到選擇器中。任何想法爲什麼。每個都不行? –

+0

它應該工作。 – ShankarSangoli

4

我認爲你需要檢查當前num-box是否被禁用通過執行以下操作...

myItem.is(':disabled') 

編輯

你能完成你想要不使用。每做什麼?

像... http://jsfiddle.net/fWCxj/2/

HTML      

<input type="checkbox" value="true" name="RDEquipListItem[2]" id="RDEquipListItem_2_">&nbsp;&nbsp;&nbsp; 
<input type="text" value="0" name="RequestList[2].iCount" id="RequestList_2__iCount" class="num-box" disabled="disabled"> 
<br /> 

<input type="checkbox" value="true" name="RDEquipListItem[3]" id="RDEquipListItem_3_">&nbsp;&nbsp;&nbsp; 
<input type="text" value="0" name="RequestList[3].iCount" id="RequestList_3__iCount" class="num-box" disabled="disabled"> 
<br /> 

<input type="checkbox" value="true" name="RDEquipListItem[4]" id="RDEquipListItem_4_">&nbsp;&nbsp;&nbsp; 
<input type="text" value="0" name="RequestList[4].iCount" id="RequestList_4__iCount" class="num-box" disabled="disabled"> 
<br /> 

JS

$('input[type=checkbox]').click(function() { 
    var cb = $(this); 
    cb.next('input[type=text]').prop('disabled', cb.is(':not(:checked)')); 
}); 

var oneFill = $('.num-box:not(:disabled)').length > 0; 
alert(oneFill); 
+0

這有助於清理我的代碼,所以我結束了在代碼中加入2.爲什麼。每次將無法正常工作的任何想法? –

+0

我已經更新了一個解決方案,上面沒有回答你關於.each的問題,但可能適用於你正在嘗試做的事情,至少我認爲你正在嘗試做什麼=)讓我知道我是否誤會。 .. –

+0

的檢查是爲我的驗證的一部分,將數據發送到服務器之前執行。 –

1

.attr()返回一個字符串,而不是一個布爾字符。如果你想檢查輸入是否被禁用,請使用.is(':disabled')