我有一个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/
答案 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
重新附加它。
$('#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');
}