为什么事件会触发jqxSlider两次更改事件?

时间:2014-01-22 01:32:13

标签: javascript jquery jqwidget

我有一个带有jqxSlider的页面,该滑块附加了onChange个事件。有几个按钮可以导致滑块的值发生变化。出于某种原因,从按钮的单击事件触发滑块的更改会导致更改触发两次。我已经设置了一个小提琴演示来演示我所看到的内容。

有人可以告诉我为什么事件会被解雇两次吗?

Fiddle Demo

HTML

<div id="jqxSlider"></div>
<div>
    <input id='theinput' />
    <button id='thebutton' type='button'>Change</button>
</div>

的JavaScript

$('#jqxSlider').jqxSlider({ min: 1, max: 30, ticksFrequency: 1, value: 1, step: 1, mode: 'fixed' });

$('#jqxSlider').on('change', function () {
   console.log('change triggered'); 
});

$('#thebutton').on('click', function () {
    $("#jqxSlider").val(parseInt($("#theinput").val(), 10));   
});

4 个答案:

答案 0 :(得分:0)

我希望这会对你有所帮助:

var triggers = 0;

$('#jqxSlider').jqxSlider({ min: 1, max: 30, ticksFrequency: 1, value: 1, step: 1, mode:  'fixed' });

$('#jqxSlider').on('change', function (event,data) {
  console.log(data);
  if(data)
  {
     triggers++;
  }

  $('#thelabel').text(triggers);
 });

$('#thebutton').on('click', function () {
 //$("#jqxSlider").val(parseInt($("#theinput").val(), 10));   
    $("#jqxSlider").trigger('change',parseInt($("#theinput").val(), 10));   
});

答案 1 :(得分:0)

我在JSFIDDLE中测试你的Demo。我删除了重要的触发按钮。我发现问题出现在触发器中,因为你打了两次 $('#jqxSlider')所以它会计算两次。我尝试删除代码并进行修改。请检查这是否可以解决您的问题。

var triggers = 0;

$('#jqxSlider').jqxSlider({ min: 1, max: 30, ticksFrequency: 1, value: 1, step: 1, mode: 'fixed' });


 $('#thebutton').on('click', function () {
triggers++;
  $('#thelabel').text(triggers);
if($("#theinput").val() <= 30){
$("#jqxSlider").val(parseInt($("#theinput").val(), 10));
    }
});

答案 2 :(得分:0)

这是Javascript中常见的Bug。你可以找到很多关于互联网的文章特别是因为事件被解雇两次。你可以试试这样的东西

 $(document).on('click', '#jqxSlider', function(e)
 {
       alert('Hellow world');
       e.stopPropagation();
       return false;
 });

这肯定是Javascript问题,因为如果你点击谷歌并搜索事件火两次,你会看到Angular,Jquery和骨干等都在某个地方发射事件两次甚至三次。所以,似乎这背后是javascript。当然,如果您使用Mozilla Developers Network进行搜索,那么您可以看到专家们也这样说过。

答案 3 :(得分:0)

原来这是jqxSlider插件中的错误。我通知了jqwidgets团队这个问题,并在最新版本中修复了它。