我有一个 jQuery 滑块(实际上是它的自定义扩展),配备了slide
事件处理程序,当以交互方式操作滑块时,该处理程序会被正确调用,但在我运行时不会
$("#slider").trigger("slide");
此命令运行没有错误,但slide
处理程序不会被调用。
为什么是这样?
我是否需要传递不同的参数来触发以slide
调用处理程序?
编辑:更改帖子的标题以更密切地反映问题的动机。
我有一个 jQuery 滑块(实际上是它的自定义扩展),配备了slide
事件处理程序,当以交互方式操作滑块时,该处理程序会被正确调用,但在我运行时不会
$("#slider").trigger("slide");
此命令运行没有错误,但slide
处理程序不会被调用。
为什么是这样?
我是否需要传递不同的参数来触发以slide
调用处理程序?
编辑:更改帖子的标题以更密切地反映问题的动机。
工作演示: 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');
原因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')
)。
可以直接调用幻灯片回调,但如果在回调中使用,您应该传递事件(或 null)和带有值的对象:
var $slider = $("#slider");
$slider.slider('option', 'slide').call($slider, null, {value:1});