这可能是一个简单的问题,但我无法理解,所以我问社区。 p>
我在表单中有一个选择列表和一个文本字段。他们都有同一个班级。
我想找到一个干净的条件语句,如果文本字段不为空,并且在选择列表中选择了默认值以外的其他部分,则允许我在表单的另一部分中禁用一组单选按钮。 / p>
到目前为止,我只能在文本字段中使用它:
$('.affector').change(function(){
if ($(this).val() !== '') {
$(this).parents('tr').find('input:radio').attr('disabled', false);
} else {
$(this).parents('tr').find('input:radio').attr('disabled', true);
}
});
..它适用于选择列表的初始更改,但出于某种原因,如果我再次选择默认值,我无法弄清楚如何让条件的'else'部分触发(和文本字段为空)。
哦,是的,选择列表是动态填充的,所以我可能不得不使用BIND ......并且页面上有多个选择字段,这就是为什么我选择了一个类。
有什么想法吗?
更新:这是HTML ...
<tr bgcolor=#ffffff>
<td valign=center>
Batter # 1
<div id="txtResult1">
<select name="player1" class="affector">
<option></option> //dynamically populated
</select>
</div>
<input type="text" id="PlayerLocal1" class="affector" name=p1name size=20>
</td>
<td>
<table border=1>
<tr>
<td>
<table border=0 cellspacing=0 cellpadding=0>
<tr>
<td><input type=radio name=p1o1 value="1B">1B</td>
<td><input type=radio name=p1o1 value="FO">FO</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
答案 0 :(得分:1)
如果我理解正确的话,你现在只检查一个值而不是两个值。也就是说,如果select元素的change
事件触发,则仅测试select元素的值,如果文本字段的change
事件触发,则仅检查文本字段的值。但是,你想要两者都被检查(AND),所以我建议像这样:
$('.affector').change(updateRadioEnabled);
function updateRadioEnabled() {
var valueGiven = true;
$('.affector').each( function() {
if ($(this).val() == "") {
valueGiven = false;
}
});
var radio = $('.affector:first').parents('tr').find('input:radio');
if (!valueGiven) {
radio.attr('disabled', true);
} else {
radio.removeAttr('disabled');
}
}
编辑:备注: 社区维基通常用于邀请交换意见的问题,而不是清晰的技术答案。你的问题显然是技术性的。
.affector:first
会找到affector
类的第一个元素,然后停止搜索。我经常这样做是为了提高效率(不过请参阅下面的布兰登评论)。在这里,我只需选择此元素即可找到单选按钮的起点。可能有更优雅的解决方案。
编辑:顺便问一下,为什么这个社区维基?