Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 复选框单击不同步-Jquery_Javascript_Jquery_Asp.net_Checkbox - Fatal编程技术网

Javascript 复选框单击不同步-Jquery

Javascript 复选框单击不同步-Jquery,javascript,jquery,asp.net,checkbox,Javascript,Jquery,Asp.net,Checkbox,我有一个带有复选框和文本输入列的表。复选框列的最后一行有一个“全选”链接 选中所有选项后,单击: 1:文本必须更改为“全部取消选中” 2:选中列中上面的框,并设置textbox text=500 在“全部取消选中”时: 1:文本必须更改为“全部检查” 2:取消选中该框并清除文本框 但是上面的第2点工作不正常 步骤: 1:单击“全部选中”-文本更改为“全部取消选中”,复选框已选中,但未将文本框设置为500 2:单击“全部取消选中”-文本更改为“全部选中”,复选框未选中,但现在它将文本框设置为500

我有一个带有复选框和文本输入列的表。复选框列的最后一行有一个“全选”链接

选中所有选项后,单击:

1:文本必须更改为“全部取消选中”

2:选中列中上面的框,并设置textbox text=500

在“全部取消选中”时: 1:文本必须更改为“全部检查” 2:取消选中该框并清除文本框

但是上面的第2点工作不正常

步骤:

1:单击“全部选中”-文本更改为“全部取消选中”,复选框已选中,但未将文本框设置为500

2:单击“全部取消选中”-文本更改为“全部选中”,复选框未选中,但现在它将文本框设置为500

我认为这是一个事件处理问题,但到目前为止我还没有弄清楚

知道发生了什么事吗

注意:我将不得不使用“onclick”,因为我的实际代码是.aspx页面,无法识别onchange with checkbox

更新的代码

尝试放炮

更新了(这是一种黑客行为,但有效):

另一种方法(非黑客方式):

试试这个

<script> 
 $(function () {
            $(".checkall").click(function () {


                if ($(this).text() == "Check All") {
                    $(this).text("Uncheck All");
                    $(this).parent().parent().prevUntil('tbody').each(function () {
                        $(this).find("td input:checkbox").attr('checked', 'checked').click();
                    });
                }
                else {
                    $(this).text("Check All");
                    $(this).parent().parent().prevUntil('tbody').each(function () {
                        $(this).find("td input:checkbox").removeAttr('checked').click();
                    });
                }
            });
        });
        function setValue(chb, txtid, valu) {
            if ($(chb).is(":checked")) {
                $("#" + txtid).val(valu);
            }
            else {
                $("#" + txtid).val("");
            }
        }

</script>

$(函数(){
$(“.checkall”)。单击(函数(){
如果($(this).text()==“全部选中”){
$(此).text(“全部取消选中”);
$(this).parent().parent().prevUntil('tbody')。每个(函数(){
$(this).find(“td输入:复选框”).attr('checked','checked')。单击();
});
}
否则{
$(此).text(“全部选中”);
$(this).parent().parent().prevUntil('tbody')。每个(函数(){
$(this).find(“td输入:复选框”).removeAttr(“选中”).click();
});
}
});
});
函数设置值(chb、txtid、valu){
如果($(chb).is(“:checked”)){
$(“#”+txtid).val(值);
}
否则{
$(“#”+txtid).val(“”);
}
}

将“checked”更改为布尔值,可以

已更新

类方法-

函数onClick()和setValue()在click()将复选框应用于复选框之前运行;

因此,在步骤1中,它没有看到复选框处于选中状态。

问题是您在调用click方法后正在设置checked属性。我尝试了您的建议,但它也不起作用。它只是反转了复选框和文本框的行为。不,我不能在那里设置它。有许多排。它必须从setValue设置,因为onclick是作为asp.net中代码隐藏的属性添加的。因此,列中每个复选框的值500将不同。然后只需切换
单击
.attr
的顺序-参见此处:我已经尝试过了,但没有成功。请检查我更新的示例,以更好地了解我的场景。添加了另一种方法,使用jQuery
data
proeprty包。我尝试了您的最终版本,但它不起作用,特别是当您只单击复选框时,但我已使其起作用。谢谢你的尝试。不,那不行。也可以看到我上面的帖子。我已经更新了代码sample.Geez。非常不合逻辑,但将复选框反向选中!chb.检查过了,似乎从一开始就起作用了。而且似乎checked属性是额外的,因为它无论如何都会被检查,所以它可能会在某个点上得到双重反转啊哈…谢谢。为什么对你有用?我试过了!chb.检查了逻辑,但其行为与原始方式相同。我会玩一点,如果我没有看到任何其他副作用,我会关闭这个。哦,我不认为它是双重反转的,但这是杰森指出的调用setValue和onclick的顺序。好吧,我明白为什么了!chb.checked对我不起作用,也不会起作用,因为使用它会破坏对复选框本身的点击。是的,我设置了警报,并了解这一点,但我现在如何修复它。以下是正确的方法和解决方案。(我尽可能少地进行编辑,以便您理解..代码可以进一步优化)。此外,即使没有人为您的代码提供修复程序,您也应该投票选择正确的答案。您还没有完全查看您的代码,但有一些副作用。如果我没有在CheckAll中设置.attr(“checked”、“checked”),单击它会将all check设置为unchecked,将unchecked设置为checked。所以我必须坚持下去。啊,忘了那个案子了。你所要做的就是在允许它点击之前验证它。这应该可以了,谢谢。您的解决方案正在推动我前进,但需要调整以使其在我的复杂场景中完全工作。我还在努力。