2017-04-17 19 views
1

私はこのコードが列のすべての見出しで機能しない理由を調べています。このコードはどの列でも最初に機能しますが、クリックイベントは2回目に発生しません。ヘッダーのthにはなぜ$(ColTh).click(function()が添付されていませんか?すべての列見出しのクリックイベントをバインドできません。一度だけ動作します

私はあなたのコードの残りの部分についてはよく分からないが、あなたのバインディングについて、あなたはこのように行うことができます
$("table.ui-datepicker-calendar > thead").find("th[scope='col']").each(function() { 
    var ColTh = $(this); 

    $(ColTh).click(function() { 
    var colIndex = $(ColTh).index(); 
    var dateList = []; 
    $(ColTh).closest('table').find('tr').each(function() { 
     var dateTd = $(this).find('td:eq(' + colIndex + ')'); 
     var month = $(dateTd).attr('data-month'); //.trigger('click'); 
     var year = $(dateTd).attr('data-year'); 
     var day = $(dateTd).children(0).text(); 
     if (typeof month != 'undefined') { 
     var monthINT = parseInt(month.trim()); 
     monthINT = monthINT + 1; 
     var newDate = monthINT + '-' + day.trim() + '-' + year.trim(); 
     dateList.push(newDate); 
     } 

    }); 
    $('#itemSchedulerCal').multiDatesPicker('addDates', dateList); 
    dateList = []; 

    }); 

}); 
+0

私はDatePickerの機能が再びすべての要素を再描画し、もはやイベントをバインドされていない新しい要素があるので、以来からだと思います。関数の委譲を使用する必要があり、それぞれをループする必要はありません。 – DaniP

+2

委任を使用するだけではどうですか? $ {ColTh} .index($ {ColTh}); $ {ColTh = this、colIndex = $(ColTh).indexは、 (); ....}) ' –

+0

私はここで委任をどのように使うことができますか? – youngseagul

答えて

0

iが

ステップ1上に実現するために手順を以下でした

jQuery(document).ready(function() { 
    $.datepicker._updateDatepicker_original = $.datepicker._updateDatepicker; 
    $.datepicker._updateDatepicker = function (inst) { 
    $.datepicker._updateDatepicker_original(inst); 
    var afterShow = this._get(inst, 'afterShow'); 
    if (afterShow) { 
     // trigger custom callback 
     afterShow.apply((inst.input ? inst.input[0] : null)); 
    } 
} 

})。

ステップ2:

$('#itemSchedulerCal').multiDatesPicker({ 
     showWeek: true, 
     minDate: 0, 
     dateFormat: "m-d-yy", 
    dayNamesMin: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], 
    defaultDate: defdate, 
    afterShow: function (inst) 
    { 
     BindClicks(); 
    } 
}); 

ステップ3:

function BindClicks() { 
// paste all above code 
} 
0

$("table.ui-datepicker-calendar").on("click", "th[scope='col']", function() { 
    var ColTh = $(this); 

    var colIndex = ColTh.index(); 
    var dateList = []; 
    ColTh.closest('table').find('tr').each(function() { 
    var dateTd = $(this).find('td:eq(' + colIndex + ')'); 
    var month = dateTd.attr('data-month'); //.trigger('click'); 
    var year = dateTd.attr('data-year'); 
    var day = dateTd.children(0).text(); 
    if (typeof month != 'undefined') { 
     var monthINT = parseInt(month.trim()); 
     monthINT = monthINT + 1; 
     var newDate = monthINT + '-' + day.trim() + '-' + year.trim(); 
     dateList.push(newDate); 
    } 

    }); 
    $('#itemSchedulerCal').multiDatesPicker('addDates', dateList); 
    dateList = []; 
}); 

あなたは$(ColTh)としてColThに使用されますが、ColThが既にありますjQueryオブジェクトは$(this)で設定しています。 dateTdも同様です。

関連する問題