Jquery。每个不工作,坏代码或更好的方法可用吗?

时间:2011-07-12 20:08:38

标签: jquery

首先设置: jquery 1.5.1 Firefox 4.0

目标: 我有一堆使用复选框启用/禁用的文本框。如果启用了文本框,我希望它的值大于零。

其中一个框的HTML(页面上有可变数量的框):

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

我的jQuery使用.each不起作用:

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脚本,在选中相应的复选框时启用/禁用文本框。

到目前为止,我已经看到了对代码的一些好的调整。我将在明天投票给那些人。

我的困惑是我的.each部分是否存在问题:

$('.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-box是由复选框启用/禁用的文本框):

//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

3 个答案:

答案 0 :(得分:4)

我认为您需要通过执行以下操作来检查当前num-box是否已被禁用...

myItem.is(':disabled')

修改

你可以在不使用.each的情况下完成你想做的事吗?

类似...... 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);

答案 1 :(得分:2)

试试这个

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

    }
});
if (!oneFill) {
}

答案 2 :(得分:1)

.attr()返回一个字符串,而不是布尔字符。如果要检查输入是否已禁用,请使用.is(':disabled')