1

我为 jQuery 编写了一个clickOut事件。它适用于非常基本的东西。现在,我正在使用下拉菜单扩大测试规模。似乎this被卷入了封闭之中。我怎样才能在不改变clickOut调用方式的情况下解决这个问题?

http://jsfiddle.net/QM6Bc/9/

(function ($) {
    'use strict';
    $.fn.clickOut = function (eventData, handler) {
        $('html').click($.proxy(function (event) {
            if (this.has(event.target).length === 0) {
                event.delegateTarget = this.get();
                console.log(this);
                if (handler === undefined) {
                    eventData(event);
                } else {
                    handler(event);
                }
            }
        }, this));
    };
}(jQuery));
jQuery('li').click(function (event) {
    jQuery(this).children().toggle('fast');
    console.log(this);
    event.stopPropagation();
});
jQuery('li li').clickOut(function () {
    console.log(this);
    jQuery(this).children().hide('fast');
});​
4

1 回答 1

2

您没有绑定this到回调中的任何内容,请尝试:

eventData.call(this, event);

handler.call(this, event);
于 2012-05-30T18:47:30.090 回答