0

上記の各ループが実行された後に List_Sandbox 関数を実行しようとしましたが、うまくいきませんでした。各ループはチェックボックスのグループを選択しており、選択する必要がある他のチェックボックスをレンダリングする変更イベントをトリガーします。List_Sandbox 関数は選択を行っていますが、スクリプトが他の新しいチェックボックスをロードする前に実行されています。どうすればこれを見抜くことができますか? .load、.on、livequery を試しましたが、どちらも機能しません。助けてください...

$.each(zone_array, function(index, zone){
    $("ul.zones li input[id='"+zone+"']").attr("checked", "checked").trigger("change");
});
List_Sandbox.select_districts_versions(district_array);
List_Sandbox.select_stores_versions(store_array);


function data_for_districts(zoneid) {
            $.getJSON('/CampaignMgmt/GetDistrictsByZone', {'clientid': clientid, 'zone': zoneid }, function(data){
                $.each(data, function(index, value){
                    $("span.notice_district").remove();
                    var zone = value.toString().substring(0, 1);
                    var li_tag = '<li zone="'+zoneid+'" class="'+ value +'"style="display: list-item; "><label><input id="'+value+'" data-id="'+value+'" data-parent-id="'+zone+'" type="checkbox" name="zone_101" value="' + value + '"><span>'+ value +'</span></label></li>';
                    $("ul.districts").append(li_tag);
                    $('ul.districts li input[id="'+value+'"]').change(function(){
                        Districts.selection(value);
                        Districts.count_districts();
                    });
                });
            });
    }
4

1 に答える 1

0

チェックボックスを追加するコードが何をしているのかはあまり明確ではありませんが、次のことを試すことができます:

var arr_length = zone_array.length;
$.each(zone_array, function(index, zone) {
    $("ul.zones li input[id='" + zone + "']").attr("checked", "checked").trigger("change");

    /* run the List_Sandbox functions after last item */
    if (index == arr_length - 1) {
        List_Sandbox.select_districts_versions(district_array);
        List_Sandbox.select_stores_versions(store_array);
    }
});

編集: jQuery >= 1.6 を使用している場合は、prop()代わりにメソッドを使用する必要がありますattr()

于 2012-10-12T23:34:27.190 に答える