Bootstrap datepicker意外地在另一个事件处理程序中触发change事件

时间:2017-04-11 02:11:21

标签: jquery twitter-bootstrap bootstrap-datepicker

我注意到Bootstrap datepicker发生意外事件。它只发生在另一个函数/处理程序中。

通常setDate不应该触发事件而且它不会!除非我将它包装到另一个函数/处理程序中。

试图理解差异并摆脱不必要的事件发射。

请帮忙。

//$('.set-date-button').click(function(event) {
  event.preventDefault();
  var startDate = '01/01/2017';
  $('.start .date').datepicker('setDate', startDate);
//}); When commented, change event doesn't fire, when uncommented - unexpected change event fires.

https://jsfiddle.net/xek22wpq/

使用changechangeDate并没有任何区别。



$('.set-date-button').click(function(event) {
  event.preventDefault();
  var startDate = '01/01/2017';
  $('.start .date').datepicker('setDate', startDate);
});

$(document).on('change', '.start .date', function() {
  alert('fired!');
});

<link href="https://rawgit.com/uxsolutions/bootstrap-datepicker/master/dist/css/bootstrap-datepicker.standalone.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://rawgit.com/uxsolutions/bootstrap-datepicker/master/dist/js/bootstrap-datepicker.min.js"></script>
<button class='set-date-button'>Set Date</button>
<div class='start'>
  <input class='date' placeholder='mm/dd/yyyy'>
</div>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:2)

https://github.com/uxsolutions/bootstrap-datepicker/issues/575

我发现update方法不会触发changeDate,但会触发change。这就是我如何消除这种额外的射击:

$('.set-date-button').click(function(event) {
  event.preventDefault();
  var startDate = '01/01/2017';
  $('.start .date').datepicker('update', startDate);
});

$(document).on('changeDate', '.start .date', function() {
  alert('fired!');
});

https://jsfiddle.net/xek22wpq/10/

答案 1 :(得分:1)

因为在您创建更改事件时已经设置了日期。如果你按逆序排列它将会发生火灾变化事件:jsfiddle.net/xek22wpq/9