4

我有一个 jQuery 滑块(实际上是它的自定义扩展),配备了slide事件处理程序,当以交互方式操作滑块时,该处理程序会被正确调用,但在我运行时不会

$("#slider").trigger("slide");

此命令运行没有错误,但slide处理程序不会被调用。

为什么是这样?

我是否需要传递不同的参数来触发以slide调用处理程序?

编辑:更改帖子的标题以更密切地反映问题的动机。

4

3 回答 3

5

工作演示: http: //jsfiddle.net/fLnmN/ http://jsfiddle.net/F5ZCK/

.bind像我在演示中使用的那样使用。你也可以.on像这样使用:http: //jsfiddle.net/u82Y5/

这里有一些非常有用的帖子:触发 jQuery UI 滑块事件

这应该适合您的需求,:)

代码

$('.slider').slider().bind({
    change: function() {
       alert('change triggered');
    }
});

$('.slider').trigger('change');

或者

$('.slider').slider().on({
    change: function() {
       alert('change triggered');
    },
    slidechange: function() {
        alert('slide trigger');
    }
});

$('.slider').trigger('change');
$('.slider').trigger('slidechange');
于 2013-10-05T11:32:01.157 回答
2

原因trigger('slide')不起作用是因为当您设置slide回调时,滑块没有DOM 元素注册滑动事件。相反,它将通用鼠标事件委托给 DOM 元素,然后在内部将它们转换为您的回调。

不幸的是,这使您不得不解决该 API。Tats_innit 的答案将事件直接绑定到 DOM 元素,但它们不绑定到滑块 API。您必须在这些处理函数中调用您的回调函数。

如果您可以访问回调,则可以直接调用它们,如下所示:

$('#slider').slider({
  'slide': onSlide
}).on('slide', onSlide);

如果您更喜欢内联定义回调函数,可以按如下方式检索它们:

$('#slider').slider({
  'slide': function(event, ui) { /* ... */ },
}).on('slide', function() {
  $(this).slider('option', 'slide').apply(this, arguments);
});

不用说这是非常多余的,但同样,这是一种解决方法。

附带说明一下,请记住,单独触发事件会跳过来自用户时将连续调用的其他事件。例如,触发stop事件会错过slide用户在调整滑块时生成的事件。您可能会考虑通过创建代表您分派多个事件的自定义事件来“证明”外部事件绑定(例如,$('#slider').trigger('setvalue'))。

于 2014-04-07T21:03:55.663 回答
0

可以直接调用幻灯片回调,但如果在回调中使用,您应该传递事件(或 null)和带有值的对象:

var $slider = $("#slider");
$slider.slider('option', 'slide').call($slider, null, {value:1});
于 2018-11-02T10:03:31.463 回答