每一个不工作,坏代码或更好的方法可用



首先设置:jquery 1.5.1Firefox 4.0

目标:我有一堆文本框是启用/禁用使用复选框。如果一个文本框被启用,我希望它的值大于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。

是否有一个单独的项目被使用的问题?

最后评论不知道为什么这给了我一个问题,但我不得不重新排序的逻辑一点。即使使用Firebug,它也不会进入"。每个"代码但结果是正确的。

最终代码(注:.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

我认为你需要检查当前的num-box是否被禁用,执行以下操作…

myItem.is(':disabled')

编辑

如果不使用。each,你能完成你想做的事情吗?

之类的…http://jsfiddle.net/fWCxj/2/

,,

<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);

试试这个

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

.attr()返回字符串,而不是布尔字符。如果你想检查输入是否被禁用,使用.is(':disabled')

最新更新