3

如果我们将一个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事件会提供滑块设置的正确值。

4

2 回答 2

9

解决方案

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

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

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

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

于 2011-05-24T13:47:08.490 回答
2

我刚刚遇到了一个非常相似的问题。

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

似乎这两种处理程序是不同的,但我在任何地方都找不到记录。

于 2011-07-20T15:51:40.773 回答