3

次の範囲で問題がthisあります。

var test = {

    $divs: $('div'),

    init: function() {
        this.$divs.each(function(){
            $(this).on('click', test.whatsmyid);
            $(window).on("resize", test.whatsmyid);
        });
    },

    whatsmyid: function() {
        console.log($(this).attr("id"));
    }

};

test.init();

http://jsfiddle.net/4NZgd/1/

クリック イベントはスコープをthis正しく処理しますが、ウィンドウのサイズ変更は処理しません。ウィンドウのサイズ変更イベントに渡されていない理由は理解していますが、変数を使用しthisて要素を渡したくないwhatsmyidので、どうすればこれを回避できますか?

4

3 に答える 3

3

これはthis、呼び出されたときresizeがウィンドウであるためです。Windows オブジェクトには がありませidん。それが返す理由undefinedです。

this関数内を変更したい場合は、次を使用できます.bind

$(window).on("resize", test.whatsmyid.bind(this));

フィドル: http://jsfiddle.net/4NZgd/2/

于 2013-10-05T17:37:17.897 に答える
0

イベントデータをバインド関数に渡すのが好きです。基本的に、eventData は javascript PlainObject であり、イベントの情報を渡すことができます。jQuery bind()

var varModule = {
    $divs: $("div"),
    init: function() {
        var me = this;

        me.$divs.each(function() {
            $(this).bind("click", { me: $(this) }, me.findID);
            $(window).bind("resize", { me: me }, me.findID);
        });
    },
    findID: function(event) {
        var me = event.data.me;    //You will get PlainObject in event.data
        console.log(me.attr("id"));    //div object will give you id but window object wont give you id attribute
    }
};

(function() {
    varModule.init();
})();
于 2013-10-05T19:52:36.527 に答える