6

我有一个输入 [date_caisse] 类:datepicker-inline AND id: [date_caisse]

我在所有网页上都初始化了这个函数:

function InitEvents () {

$('.datepicker-inline').datepicker({

    showButtonPanel: true,  /*added by oussama*/
    changeMonth: true, /*added by oussama*/
    changeYear: true, /*added by oussama*/
    firstDay: 1,
    dateFormat: 'yy-mm-dd',/*'dd/mm/yy'*/
    onSelect: function (dateText, inst) {
        //alert('select!');
        id = $(this).attr('id');
        parts = id.split('-');
        id2 = parts[parts.length -1];
        $('#datepicker-target-id-' + id2).val(dateText);
    }
});

}

我想仅在当前页面上应用 onSelect,所以这就是我所做的:

$('#date_caisse').datepicker({

    onSelect: function (dateText, inst) {
        alert('select!');
    }
});

当我输入 alert('select!'); 在主 js 文件(在所有页面中调用)上它有效!但是当我尝试通过当前文件触发操作时它不会。

也许, onSelect 不应该被调用两次。

那么,任何人都可以帮助我吗?

谢谢,祝你有美好的一天!

4

2 回答 2

13

您是否将第二个函数放在 jquery 初始化块中?我的意思是,它应该看起来像

$(function(){
   $('#date_caisse').datepicker({
      onSelect: function (dateText, inst) {
         alert('select!');
      }
   });
});

编辑:

好,我知道了。第一次初始化 datepicker 时,原始 dom 元素被标记为一个新的类添加,称为hasDatepicker以防止后续初始化/重新配置。我发现摆脱它的方法是在对日期选择器的配置进行任何修改之前删除该标记。因此:

$(function() {
   $('#date_caisse').removeClass('hasDatepicker');
   $('#date_caisse').datepicker({
       onSelect: function(dateText, inst) {
           alert('overridden!');
       }
   });
});

试试看!

于 2012-02-09T12:04:21.513 回答
4

注意:如果您设置选项,日期选择器不会触发元素的更改事件。onSelect

如果有任何机会您需要响应change元素的事件,您需要记住在设置时自己触发更改事件onSelect(),例如:

$(function(){
   $('#date_caisse').datepicker({
      onSelect: function (dateText, inst) {
         alert('select!');
         // Remember to fire the change event...
         if (inst.input) {
             inst.input.trigger('change');
         };
      }
   });
});

使用的替代方法onSelect是绑定到dateSelected日期选择器触发的事件。

于 2013-04-16T21:20:04.177 回答