2016-06-21 73 views
1

我使用jQuery日期选择器,需要一个自我执行的功能才能正常工作,所以我的JS是这样的:的onClick执行功能的jQuery

$(function(){ 
     $('#datepicker').datepicker({ 
      // beforeShowDay: disableSpecificDays, 
      inline: true, 
      showOtherMonths: true, 
      dayNamesMin: [ "M", "T", "W", "T", "F", "S", "S" ], 
     }); 

     $('#datepicker td').on('click', function() { 
      console.log($(this).text()); 
     }); 
    }); 

onClick事件的作品,但只有它火一次。如果我把它从功能中解放出来,它根本就不会起火。

有谁知道为什么?

+0

“自执行功能”没有这样的事,哪怕是在你的代码。为什么你需要[立即调用函数表达式](https://en.wikipedia.org/wiki/Immediately-invoked_function_expression)? – feeela

+0

是否​​几次重新生成?如果是这样,请改为'$(document).on(selector,event,function)' –

+0

您是否尝试过使用委托事件? (即'$(document).on('click','#datepicker td',function(){});')参见:http://api.jquery.com/on/#direct-and-delegated-事件 – feeela

回答

2

尝试:

$('#datepicker').datepicker({ 
    onSelect: function(dateText, inst) { 
     console.log(dateText); 
     // you code here.. 
    } 
}); 

在选择了日期选择器时调用。该函数将所选日期作为文本并将日期选择器实例作为参数。这指的是相关的输入字段。

或者,你可以简单地重新连接你的事件到UI的日期选择器的元素:

var element = document.getElementById('datepicker'), 
    cols = element.getElementsByTagName("td"); 

    attachEvents(); // call function on load 

    function attachEvents() { 
    for(var i = 0; i < cols.length; i++) { 
     cols[i].addEventListener("click", function (ev) { 
      console.log(this); 
      attachEvents(); 
      }, false); 
    } 
    } 
+0

如果我在datepicker的'onSelect'方法内使用控制台登录'this',我会得到'datepicker'。我如何定位我按下的实际'td'元素? @Neeraj谢谢! – PourMeSomeCode

0

当您附加点击侦听器时,DOM元素尚未出现。为了克服这个问题,你需要使用委托事件。尝试使用此代码段:使用onSelect事件

$(function() { 
    $('#datepicker').datepicker({ 
     // beforeShowDay: disableSpecificDays, 
     inline: true, 
     showOtherMonths: true, 
     dayNamesMin: ["M", "T", "W", "T", "F", "S", "S"], 
    }); 

    $('#datepicker').on('click', 'td', function() { 
     console.log($(this).text()); 
    }); 
});