我有一个包含2个jQuery Mobile滑块的页面,以及两个滑块的.change()事件的函数。
我需要在2个滑块之间建立关系,这样如果我滑动第1个滑块,它会改变第2个滑块的最大值。
问题是,如果我在第一个滑块的更改事件中执行此操作:例如:
$('#durationSlider').max("10"); // Change the max of the 2nd slider
$('#durationSlider').slider("refresh"); // Visually update the 2nd slider
然后这显然会触发第二个滑块的更改事件,它会导致递归代码。
有没有办法传递一个标志或数据来指示更改事件是来自用户幻灯片还是来自手动.slider(“刷新”)函数调用?
答案 0 :(得分:1)
如何检查evt是“手动”还是“计算机”生成的是检查更改功能中的originalEvent。
change: function(evt, ui){
if (evt.originalEvent === undefined){
//not human
}else{
//human
}
从示例http://jsfiddle.net/nicolapeluchetti/82B4m/
看这个小提琴小提琴的代码(以防jsfiddle失败):
<button id='b'>Click me</button>
<button id='c'>Click the other</button>
$('#b').click(function(e) {
if (e.originalEvent === undefined) {
alert('not human');
} else {
alert('human');
}
});
$('#c').click(function(e) {
$('#b').click();
});
答案 1 :(得分:0)
e.originalEvent和jquery移动滑块的问题令我感到困惑:
如果滑块拖动,originalEvent
为undefined
,或@Nicola称之为“非人类”;如果输入值本身已更改,则originalEvent
存在,一切正常。
所以,诀窍似乎是获取slidechange
事件而不是change
事件,但我没有看到jquery MOBILE文档中记录了slidechange
。
答案 2 :(得分:0)
您还可以在刷新滑块之前进行解除绑定,然后再次绑定到您的函数。
$('#durationSlider').unbind("change");
$('#durationSlider').slider("refresh");
$('#durationSlider').bind("change", MyFunction);