首先设置: 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
答案 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_">
<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_">
<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_">
<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')