【问题标题】:jQuery UI Sortable: order of eventsjQuery UI 可排序:事件的顺序
【发布时间】:2013-11-29 08:51:45
【问题描述】:

有谁知道触发 jQuery 可排序事件的顺序是什么? 我问这个是因为我遇到了stopupdate 的问题。对我来说,update 事件将在 stop 事件之后发生更有意义,但事实并非如此。

这是否记录在任何地方或有人对此进行过调查?我找不到合适的列表,也不想浏览代码。

【问题讨论】:

    标签: javascript jquery jquery-ui


    【解决方案1】:

    事件顺序为:

    create - 创建可排序时触发

    start - 排序开始时触发

    activate - 在拖动开始时为每个连接的列表触发

    over - 当可排序项目被移动到可排序列表时触发

    排序 - 排序期间触发

    change - 在排序期间触发,但仅在 DOM 位置发生变化时触发

    beforeStop - 在排序停止前触发,占位符/助手

    update - 在停止排序且 DOM 位置发生变化时触发

    deactivate - 在排序停止之前触发,传播到所有可能的连接列表

    out - 当可排序项目从可排序列表中移出时触发

    stop - 排序停止时触发

    还有其他可能发生的事件:

    接收/删除 - 当项目在列表之间移动时触发

    不知道为什么这在 jQueryUI 网站上不是更清楚。

    请注意,根据触发的事件,ui 参数会有所不同。值得查看 API 文档以明确这是什么并对其进行调试。

    http://api.jqueryui.com/sortable/

    【讨论】:

      【解决方案2】:

      停止事件是最后一个被触发的事件。检查here 以查看 Jquery 可排序元素的所有事件。

      【讨论】:

        【解决方案3】:

        从目前的源码来看,update事件被放入了一个队列中:

        delayedTriggers.push(function(event) {
            this._trigger("update", event, this._uiHash());
        }); //Trigger update callback if the DOM position has changed
        

        然后在beforestopstop 之间触发排队的事件:

        this._trigger("beforeStop", event, this._uiHash());
        for (i=0; i < delayedTriggers.length; i++) {
                delayedTriggers[i].call(this, event);
        } //Trigger all delayed events
        this._trigger("stop", event, this._uiHash());
        

        因此,在当前实现中,update 事件将始终在stop 事件之前触发。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-10-15
          • 2013-07-20
          • 2011-03-25
          • 1970-01-01
          • 1970-01-01
          • 2011-02-09
          • 1970-01-01
          • 2019-09-30
          相关资源
          最近更新 更多