首先是设置: jquery 1.5.1 Firefox 4.0 目标: 我有一堆使用复选框启用/禁用的文本框.如果启用了文本框,我希望它的值大于零. 其中一个框的HTML(页面上有可变数量的框): input type="text" val
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试试这个
var oneFill = false; $('.num-box').each(function() { var myItem = $(this); if (myItem.is(":enabled") && parseInt(myItem.val()) > 0) { oneFill = true; } }); if (!oneFill) { }