【问题标题】:jQuery Mobile Slider - refresh eventjQuery Mobile Slider - 刷新事件
【发布时间】:2011-07-23 08:16:51
【问题描述】:

我有一个包含 2 个 jQuery Mobile 滑块的页面,以及两个滑块的 .change() 事件函数。

我需要建立两个滑块之间的关系,这样如果我滑动第一个滑块,它就会改变第二个滑块的最大值。

问题是,如果我在第一个滑块的更改事件中执行此操作:例如: $('#durationSlider').max("10"); // Change the max of the 2nd slider

$('#durationSlider').slider("refresh"); // Visually update the 2nd slider

那么这显然会触发第二个滑块的更改事件并导致递归代码。

是否有任何方法可以传递标志或数据来指示更改事件是来自用户幻灯片还是来自手动 .slider("refresh") 函数调用?

【问题讨论】:

    标签: jquery events mobile slider


    【解决方案1】:

    您可以通过检查更改函数中的 originalEvent 来检查 evt 是“手动”还是“计算机”生成的。

     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();
    });
    

    【讨论】:

    • 这个答案实际上并没有解决 slider 的问题,尽管我认为它暗示了解决方案(originalEvent)
    【解决方案2】:

    e.originalEvent 和 jquery 移动滑块的问题让我很困惑:

    http://jsfiddle.net/82B4m/68/

    如果滑块被拖动,则originalEventundefined,或者正如@Nicola 所说,'不是人类';如果 input 值本身发生变化,originalEvent 存在,一切正常。

    因此,诀窍似乎是获取 slidechange 事件而不是 change 事件,但我没有看到 jquery MOBILE 文档中记录了 slidechange

    【讨论】:

      【解决方案3】:

      您也可以在刷新滑块之前取消绑定,然后再次绑定到您的函数。

      $('#durationSlider').unbind("change");
      $('#durationSlider').slider("refresh");
      $('#durationSlider').bind("change", MyFunction);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-19
        • 1970-01-01
        相关资源
        最近更新 更多