Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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
Jquery 为什么我必须调用alert一次才能使javascript正常工作?_Jquery - Fatal编程技术网

Jquery 为什么我必须调用alert一次才能使javascript正常工作?

Jquery 为什么我必须调用alert一次才能使javascript正常工作?,jquery,Jquery,这个问题真的很奇怪。我想做的是将复选框值添加到隐藏字段中,如果未选中,则从隐藏字段中删除该值。我使用javascript来实现这一点,但是,我发现只有调用alert一次,代码才能正常工作,否则就无法正常工作。谁能告诉我为什么 var cpo={ AddCheckList:function(){ alert('aaaaaaaaaa'); //If I comment this line, the following code won't work. $(".BillChec

这个问题真的很奇怪。我想做的是将复选框值添加到隐藏字段中,如果未选中,则从隐藏字段中删除该值。我使用javascript来实现这一点,但是,我发现只有调用alert一次,代码才能正常工作,否则就无法正常工作。谁能告诉我为什么

var cpo={
    AddCheckList:function(){
    alert('aaaaaaaaaa'); //If I comment this line, the following code won't work.
    $(".BillChecked").change(function() {
            if ($(this).is(':checked')) {
                var idList = $('#CPO_BillList').val() + $(this).attr('value') + ",";
                $('#CPO_BillList').val(idList);
            } else {
                var temp = $('#CPO_BillList').val().replace($(this).attr('value') + ',', '');
                $('#CPO_BillList').val(temp);
            }
            alert($('#CPO_BillList').val());
    });
}
我打电话 cpo.AddCheckList(); 在这一页的底部


上面是$(document).ready()函数。只有在警报方法被调用一次时才起作用。

请尝试这种方法,检查代码并避免执行循环

$(document).ready(function(){

    var billChecked = $(".BillChecked");
    var cpoBill = $('#CPO_BillList');

    var cpo = {AddCheckList:function(){

        billChecked.change(function(){

            var checked = $(this).is(':checked');
            var billVal = $(this).val();

            checked ? v = cpoBill.val() + billVal : v = cpoBill.val().replace(billVal + ',', '');
            cpoBill.val(v);
        });
    };

});

警报对话框会阻止其余javascript的执行。以下其中一项将起作用:

输入代码

$(document).ready(function{
    /*code here*/
});
或者将脚本块放在
标记的底部

您还应该将
$(“.BillChecked”)
存储在一个变量中,因为每个带有选择器的jQuery调用都非常昂贵

var $billChecked = $(".BillChecked");

为什么要循环绑定更改事件?那没必要。。您在控制台中是否也有错误?可能是因为您没有将此代码放入处理程序。但是,如果我没有对第一行进行注释,代码是如何工作的?@Steven,因为此警报延迟了其余javascript的执行。@Christoph:有意义。那么你有解决这个问题的方法吗?我刚刚更新了我的帖子,实际上我把代码放在了页面的底部,但是如果我评论了这个警告,它仍然没有work@steven所以把它放到doument.ready中,它肯定会工作。如果我不评论这个警告('aaaaaaaaaa'),加载页面时会弹出警告窗口;