0

この問題は本当に奇妙です。私がやりたいことは、チェックボックスの値を隠しフィールドに追加し、チェックされていない場合は隠しフィールドから値を削除することです。これを実装するためにjavascriptを使用していますが、アラートを1回呼び出すだけでコードが機能することがわかりましたが、それ以外の場合は機能しません。誰でも理由を教えてもらえますか?

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() 関数です。一度呼び出されるアラートメソッドがある場合にのみ機能します。

4

2 に答える 2

0

警告ダイアログは、残りの JavaScript の実行をブロックします。次のいずれかが機能します。

コードを入れる

$(document).ready(function{
    /*code here*/
});

<body>または、タグの下部にスクリプト ブロックを配置します。

$(".BillChecked")また、セレクターを内部に持つすべての jQuery 呼び出しはかなりコストがかかるため、変数に格納する必要があります。

var $billChecked = $(".BillChecked");
于 2012-08-17T19:23:49.520 に答える
0

この方法を試して、コードを確認し、ループを回避してください。

$(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);
        });
    };

});
于 2012-08-17T19:22:02.667 に答える