在更改时,即使是动态插入的输入标签上的日期选择器的处理程序也不起作用?



我有两个动态插入的标签,ID分别为拾取和拾取到。我正在使用这个插件:http://www.eyecon.ro/bootstrap-datepicker/单击日期选择器时调用它,并在日期更改时执行一些任务。过去,当输入标签不是动态插入的,但必须更改应用程序行为时,它就可以工作了,现在,输入标签是动态插入的。下面的代码不再有效:

var picker = $('#pick-from, #pick-to').datepicker().on('changeDate', function(ev) {
        picker.datepicker('hide');
        var today   = new Date(ev.date),
            dd      = today.getDate(),
            mm      = today.getMonth() + 1,
            yyyy    = today.getFullYear();
        if (dd < 10) dd = '0' + dd;
        if (mm < 10) mm = '0' + mm;
        var inputVal    = mm + '/' + dd + '/' + yyyy,
            target      = ev.currentTarget.id;
        // All my other code goes here.
    });

我甚至尝试过:

$(document).on('click', '#pick-from, #pick-to', function() {
    var picker = $(this).datepicker().on('changeDate', function(ev) {
        picker.datepicker('hide');
        var today   = new Date(ev.date),
            dd      = today.getDate(),
            mm      = today.getMonth() + 1,
            yyyy    = today.getFullYear();
        if (dd < 10) dd = '0' + dd;
        if (mm < 10) mm = '0' + mm;
        var inputVal    = mm + '/' + dd + '/' + yyyy,
            target      = ev.currentTarget.id;
        // A lot of other code comes here.
    }});

第二个代码片段有效,但并不一致。当我点击两个输入框并第二次点击其中一个时,它就起作用了。我该如何解决这个问题?

您可以将事件应用于容器元素并委托它:

$("#myContainer").on('changeDate', '#pick-from, #pick-to', function() { ... });

http://api.jquery.com/on/

.on( events [, selector ] [, data ], handler ) 

当提供选择器时,事件处理程序被称为委派。当事件直接发生在绑定元素上时,不调用处理程序,而仅针对与选择器匹配的子体(内部元素)调用处理程序。jQuery将事件从事件目标标记到附加处理程序的元素(即从最里面到最外面的元素),并为与选择器匹配的路径上的任何元素运行处理程序。

最新更新