防止在datepicker上触发show事件

时间:2016-11-01 16:27:08

标签: jquery html twitter-bootstrap bootstrap-datepicker

我有一个bootstrap datepicker。我希望首次单击输入框时触发show事件。但是,如果用户使用上一个和下一个箭头遍历这些月份,我不希望触发该事件。

这可能吗?

$('#sandbox-container input').datepicker({
    autoclose: true
});

$('#sandbox-container input').on('show', function(e){
    console.log('show event');
});

如果您运行小提琴,您将在第一次单击输入字段时看到消息被记录(我希望该行为)。但是,如果使用上一个和下一个箭头,您还会看到显示的消息。

JS Fiddler在这里 - http://jsfiddle.net/LcqM7/611/

2 个答案:

答案 0 :(得分:1)

您需要检查show是否已经"运行"在当前的状态"。

$('#sandbox-container input')
    .on('show', function(e){
        if (! $(this).data('showrun')) {
            console.log('show event');
            $(this).data('showrun', true);
        }
    })
    .on('hide', function(e){
      $(this).data('showrun', false);
    })
    .on('changeMonth', function(e){
        console.log('change month event');
    });

一个有效的例子:
http://jsfiddle.net/k6b3yepb/

答案 1 :(得分:0)

这有点严峻,但您可以利用hide事件取消绑定show,然后使用jqueries one重新附加它。

http://jsfiddle.net/5dhkumko/

$('#sandbox-container input').datepicker({
    autoclose: true
});

$('#sandbox-container input').one('show', showMethod);

$('#sandbox-container input').on('hide', function(e) {
    $('#sandbox-container input').off('show', showMethod).one('show', showMethod);
});

function showMethod() {
    console.log('show event');
}