0

我正在尝试为网格制作某种自动检查/取消选中功能:

Check [x] | Data1 | Data2 | Order: [____]

下面是我想出的代码,问题:当我输入文本框时 -> 复选框正在检查 - 好的,然后我删除文本 -> 取消选中 - 好的,然后当我再次输入任何内容时,复选框没有按应有的方式检查。我在想row变量是否可能导致这种情况,但我不确定。请帮忙。

 $(document).ready(function () {
    var counter = 0;
    $(".grid > tbody > tr").each(function () {
        if (counter > 0) {
            var row = $(this);
            $(this).find("input[type=text]").keyup(function () {
                var tinput = $(this).val();
                var chkbox = row.find("input[type=checkbox]");
                if (tinput.length == 0) {
                    chkbox.attr("checked", false);
                } else {
                    chkbox.attr("checked", true);
                }
            });
        } else counter = counter + 1;
    });
});

小提琴:http: //jsfiddle.net/JSDQ6/

4

2 回答 2

1

无需遍历它们并附加事件处理程序。只需从一开始就针对所有这些,因为它们是相似的 --->示例

$('table tr:gt(0) input[type="text"]').keyup(function(){
      var val = $.trim($(this).val());
      var chkBox = $(this).parent().parent().find('input[type="checkbox"]');
   if(val.length > 0){
       chkBox.prop('checked', true);
   }else{
       chkBox.prop('checked',false);
   }
});
于 2013-07-25T15:38:32.007 回答
1

不要使用 .attr() 来检查复选框,因为 'checked="checked"' 不是属性,而是属性。非常常见的误解/问题。我曾经做过同样的事情,有一天它把我逼到了一堵墙,哈哈。

而是使用这个:

chkbox.prop("checked", false); //unchecks a checkbox
chkbox.prop("checked", true);  //checks a checkbox

仅供将来参考,对选择也应用相同的逻辑:

$('select').find('option.choice1').prop('selected', true);

祝你好运!

于 2013-07-25T15:39:12.567 回答