【问题标题】:How to pass arguments to an event handler?如何将参数传递给事件处理程序?
【发布时间】:2011-05-02 04:36:33
【问题描述】:
var MyObject = {
    init: function () {
        this.items = $('#menu a');

        for (var i = 0; i < this.items.length; i++) {
            $(this.items[i]).bind('click', this.doSomething);
        }
    },

    doSomething: function (index) {
        alert(this.items[index].innerHTML);
        // alerts: One, Two, Three
    }
};

我需要通过索引 (i)

编辑:插图:http://jsfiddle.net/mUjAj/

【问题讨论】:

    标签: parameter-passing jquery


    【解决方案1】:

    试试这个,看看它是否有效:

    var MyObject = {
        init: function () {
            this.items = $('#menu a');
    
            for (var i = 0; i < this.items.length; i++) {
                $(this.items[i]).bind('click', {index:i}, this.doSomething);
            }
        },
    
        doSomething: function (e) {
            alert(e.data.index);
    
        }
    };
    

    【讨论】:

    • 是的,它可以工作,只是稍微修复一下:doSomething: function (e) ...,谢谢
    • Opps,我需要“this”将是 MyObject,而不是触发事件的元素“a”。
    【解决方案2】:

    这里不需要传递索引,因为this 将引用您想要在click 事件处理程序中单击的元素,您可以这样做:

    var MyObject = {
        init: function () {
            this.items = $('#menu a');
            this.items.bind('click', this.doSomething);
        },    
        doSomething: function () {
            alert(this.innerHTML);
        }
    };
    

    You can test it out here.

    【讨论】:

    • 是的,但我需要“this”将是 MyObject,而不是触发事件的元素“a”。
    • @Luistar15 - 在事件处理程序中并非如此,this 指的是元素,如果你希望它指代元素,最好创建一个像 self 这样的变量引用或更改处理程序的上下文...但无论如何只有一个变量副本,您可以通过 MyObject 引用它,除非我遗漏了什么?
    • 我明白了,是的,只有一份。所以,我不能做这样的事情 (jsfiddle.net/mUjAj/2) 吗? jquery 版本将是 (jsfiddle.net/mUjAj/3)。那么,确定我不能使用“this”来指代“MyObject”吗?或者有什么办法吗?
    • @Luistar15 - 如果您使用的是 jQuery 1.4,则使用代理:jsfiddle.net/nick_craver/mUjAj/4 或者您可以使用另一个函数执行相同的操作,例如:jsfiddle.net/nick_craver/mUjAj/5
    猜你喜欢
    • 1970-01-01
    • 2012-08-30
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    相关资源
    最近更新 更多