触发jQuery UI滑块事件

Gre*_*reg 53 jquery events jquery-ui-slider

如何在jQuery UI滑块上触发更改事件?

我以为会是

$('#slider').trigger('slidechange');
Run Code Online (Sandbox Code Playgroud)

但这没有任何作用.

完整示例脚本如下:

<link href="http://jqueryui.com/latest/themes/base/ui.all.css" rel="stylesheet" type="text/css"> 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js" type="text/javascript"></script> 
<script src="http://jqueryui.com/latest/ui/ui.core.js" type="text/javascript"></script> 
<script src="http://jqueryui.com/latest/ui/ui.slider.js" type="text/javascript"></script> 

<body>

<div id="slider"></div>

<script type="text/javascript">

$().ready(function()
{
    $('#slider').slider({change: function() { alert(0); }});

    // These don't work
    $('#slider').trigger('change');
    $('#slider').trigger('slidechange');
});
</script>
Run Code Online (Sandbox Code Playgroud)

当页面加载时,我希望这会警告"0"

red*_*are 50

尝试

$slider = $('#slider');
$slider.slider('option', 'change').call($slider);
Run Code Online (Sandbox Code Playgroud)

不理想,但让你工作!

替代文字

  • @charlessun我遇到了同样的问题,并且手动提供了这两个参数:`$ slider.slider('option','slide')(null,{value:$ slider.slider('value')}) (第一个参数是'事件',第二个是'ui').Jquery UI版本1.10.2 (14认同)
  • @redsquare当我尝试使用$ slider.slider('option','slide')触发"slide"事件时.call($ slider); 我得到"事件"和"ui"未定义. (8认同)
  • 说真的,jqueryUI是如此完整的混乱,任何稍微进步的东西你都会被黑客攻击.不仅滑块 - 整个图书馆一直都很糟糕. (4认同)
  • 丑陋:p + 1虽然'因为它有效.如果John Resig停下来,我会给它一点时间...... (3认同)

Joe*_*ore 39

我知道这已经超过了发布日期,但是我想发布这个解决方案给任何偶然发现这篇文章的人.

您可以通过执行以下操作来完成事件触发:

//TO DEFINE SLIDER AND EVENTS
$('#slider').slider().bind('slidechange',function(event,ui){...});

//TO TRIGGER EVENT
$('#slider').trigger('slidechange');
Run Code Online (Sandbox Code Playgroud)

遗憾的是,您无法将函数定义为init对象中的选项,但是,我认为它最终看起来更清晰,并且比使用调用方法的其他答案更直接和正确(即它确实使用事件系统).

是的,你在这里定义的回调将在正常操作(在这种情况下改变滑块的位置)被调用,就像通常那样.只需确保使用UI文档中的正确事件类型名称.

如果要一次添加多个事件,请记住您可以使用事件名称作为键提供要绑定的对象:

//TO DEFINE SLIDER AND EVENTS
$('#slider').slider().bind({
    slidestart  : function(event,ui) {...},
    slidechange : function(event,ui) {...},
    slidestop   : function(event,ui) {...},
});

//TO TRIGGER EVENTS
$('#slider').trigger('slidestart');
$('#slider').trigger('slidechange');
$('#slider').trigger('slidestop');
Run Code Online (Sandbox Code Playgroud)

这在文档中有说明,但不是很清楚.我自己开发了几个插件来真正理解UI事件系统.

请享用

  • 这给了我"TypeError:ui is undefined" (5认同)

hra*_*itz 15

一个好方法就是改变滑块的值.然后,滑块自身的更改方法应响应值的更改.例如:

var newValue=5;
$('#slider').slider("value", newValue);
Run Code Online (Sandbox Code Playgroud)