具有相同类的2个表单元素的jquery条件语句

时间:2010-01-11 04:52:37

标签: jquery select conditional

这可能是一个简单的问题,但我无法理解,所以我问社区。

我在表单中有一个选择列表和一个文本字段。他们都有同一个班级。

我想找到一个干净的条件语句,如果文本字段不为空,并且在选择列表中选择了默认值以外的其他部分,则允许我在表单的另一部分中禁用一组单选按钮。 / 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>

1 个答案:

答案 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类的第一个元素,然后停止搜索。我经常这样做是为了提高效率(不过请参阅下面的布兰登评论)。在这里,我只需选择此元素即可找到单选按钮的起点。可能有更优雅的解决方案。

编辑:顺便问一下,为什么这个社区维基?