события, запускаемые дважды в jQWidgets

#javascript #jquery #events #jqwidget

#javascript #jquery #Мероприятия #jqwidget

Вопрос:

Почему это событие запускается дважды?

Обходным путем является проверка event.args, но событие все равно запускается дважды.

 $('#input').jqxInput({
  width: 200,
  height: 25
});

var changedCount = 0;
$('#input').on('change', function(event) {
  console.log("changed");
  console.log(event.args != undefined)
  changedCount  ;
  $("#log").html("total times fired: "   changedCount);
}); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="http://jqwidgets.com/public/jqwidgets/styles/jqx.base.css" rel="stylesheet" />
<script src="http://jqwidgets.com/public/jqwidgets/jqx-all.js"></script>

<input id="input">
<div id='log'></div> 

Ответ №1:

Попробуйте это, Jsfiddle

Вместо изменения попробуйте размытие.

 var changedCount = 0;
$('#input').on('blur', function(event) {
  console.log("changed");
  console.log(event.args != undefined)
  changedCount  ;
  $("#log").html("total times fired: "   changedCount);
});
 

Комментарии:

1. это неплохо, но теперь событие будет срабатывать каждый раз, когда пользователь покидает поле ввода.

2. @MattJacobsen Я обновил jsfiddle. Теперь он сработает, если пользователь оставит ввод с некоторым значением.

Ответ №2:

Попробуйте выполнить следующее:

 $('#input').on('change', function(event) {
  if (!event.args) return;

  console.log("changed");
  console.log(event.args != undefined)
  changedCount  ;
  $("#log").html("total times fired: "   changedCount);
});
 

Делая это, вы гарантируете, что вызывается пользовательское событие jQWidgets, а не стандартное событие изменения Javascript входных тегов.