假设我有一个web应用程序,它的页面可能包含4个脚本块——我编写的脚本可能在其中一个块中找到,但我不知道哪个块由控制器处理.

我将大约onclick个事件绑定到一个按钮,但我发现它们有时会以我意想不到的顺序执行.

有没有办法确保秩序,或者你们过go 是如何处理这个问题的?

推荐答案

我多年来一直试图推广这种过程,但在我的例子中,我只关心链中第一个事件侦听器的顺序.

如果它有任何用处,下面是我的jQuery插件,它绑定了一个总是在任何其他事件之前触发的事件侦听器:

** UPDATED inline with jQuery changes (thanks Toskan) **

(function($) {
    $.fn.bindFirst = function(/*String*/ eventType, /*[Object])*/ eventData, /*Function*/ handler) {
        var indexOfDot = eventType.indexOf(".");
        var eventNameSpace = indexOfDot > 0 ? eventType.substring(indexOfDot) : "";

        eventType = indexOfDot > 0 ? eventType.substring(0, indexOfDot) : eventType;
        handler = handler == undefined ? eventData : handler;
        eventData = typeof eventData == "function" ? {} : eventData;

        return this.each(function() {
            var $this = $(this);
            var currentAttrListener = this["on" + eventType];

            if (currentAttrListener) {
                $this.bind(eventType, function(e) {
                    return currentAttrListener(e.originalEvent); 
                });

                this["on" + eventType] = null;
            }

            $this.bind(eventType + eventNameSpace, eventData, handler);

            var allEvents = $this.data("events") || $._data($this[0], "events");
            var typeEvents = allEvents[eventType];
            var newEvent = typeEvents.pop();
            typeEvents.unshift(newEvent);
        });
    };
})(jQuery);

Things to note:

  • 这还没有得到充分的测试.
  • 它依赖于jQuery框架的内部 struct ,没有改变(仅在1.5.2中测试).
  • 它不一定会在以除作为源元素的属性或使用jQuery bind()和其他相关函数以外的任何方式绑定的事件侦听器之前触发.

Jquery相关问答推荐

将搜索面板和服务器端与POST AJAX请求一起使用时出现DataTables错误

使用带有 bootstrap 验证的 Ajax 函数时出现问题

Jquery each - 停止循环并返回对象

如何从 onclick div 属性检测 Javascript 中的 control+click?

jQuery在点击函数后获取
  • 元素的id/value
  • jQuery切换CSS?

    非 AJAX jQuery POST 请求

    根据属性'data-sort'对jQuery中的div进行排序?

    moment.js isValid 函数无法正常工作

    如何在 Jquery 中将 delay() 与 show() 和 hide() 一起使用

    将 CSS 应用于 jQuery 对话框按钮

    验证外部脚本是否已加载

    为不同的 node 类型配置jstree右键上下文菜单

    使用 jQuery 和 CSS 将数字转换为星级显示

    Chrome 中的 AJAX 发送选项而不是 GET/POST/PUT/DELETE?

    什么时候应该使用 jQuery 的 document.ready 函数?

    在 Firefox 上开发的 Javascript 在 IE 上失败的典型原因是什么?

    自调用函数前的分号?

    Ajax 处理中的无效 JSON 原语

    如何判断值是否为 JSON 对象?