jQuery UI小部件(即Slider)并触发其自定义事件处理程序

时间:2011-05-24 13:04:03

标签: jquery jquery-ui events slider jquery-ui-slider

如果我们将click事件绑定到链接

$("linkSelector").click(function(){ ... });

然后,即使用户没有点击链接,我们也可以轻松强制执行此事件处理程序。

$("linkSelector").click(function() { ... }).click();

但在我的情况下,我正在使用jQuery Slider小部件,它具有可以绑定事件处理程序的slide事件。我想知道我们如何以编程方式强制执行其事件?

我试过以下但没有一个有效:

$("sliderSelector").slider({ slide: function(){ ... } }).slide();
$("sliderSelector").slider({ slide: function(){ ... } }).slider("slide");
$("sliderSelector").slider({ slide: function(){ ... } }).trigger("slide");

我知道我可以使用命名函数而不是匿名函数,但我不认为这是一个解决方案因为我可以用我想要的任何参数调用函数,而触发slide事件会提供正确的值由滑块设置。

2 个答案:

答案 0 :(得分:9)

解决方案

这是实际触发此类事件处理程序的结果代码:

var s = $("sliderSelector").slider({ slide: function(evt, ui){ ... } });
s.slider("option", "slide").call(s, null, { values: s.slider("values") });

确保提供实际在事件处理程序中使用的函数参数。在我使用范围滑块的情况下,我需要ui.values参数,所以我创建了这样一个对象,因此我的处理程序不会中断。

这不是一个很好的解决方案,因为我必须多次调用.slider()函数,但这是阻止使用魔法值的最安全的方法。

答案 1 :(得分:2)

我刚才有一个非常类似的问题。

如果您使用.bind()(或.on为jQuery的更高版本)注册回调,而不是将它们放入初始化程序,则可以按预期使用.trigger()调用它们。

似乎两种处理程序不同,但我无法在任何地方找到记录。