jQuery $ (это) проблема - PullRequest
3 голосов
/ 06 мая 2011

Я пишу некоторые коды jQuery, как показано ниже:

$('.button').each(function(){
    $(this).click(function(){
        console.log($(this));
        do_sth();
    });
});

var do_sth = function(){
    console.log($(this));
}

Я хочу, чтобы результаты console.log были такими же, но они работают неправильно ... Первый относится к HTMLElement, а второйв DOMWindow ... Как я могу переписать функцию do_sth, чтобы они все ссылались на HTMLElement?Спасибо.

Ответы [ 5 ]

9 голосов
/ 06 мая 2011

Вы могли бы сделать ...

do_sth.call(this);

В качестве альтернативы вы можете использовать метод jQuery proxy().

$.proxy(do_sth, this)();

jsFiddle .

4 голосов
/ 06 мая 2011

1. Вы можете сделать его функцией-прототипом:

$.fn.do_sth = function() { console.log( this ); };

В другом fn, просто сделайте $(this).click(function() { $(this).do_sth(); });

2. Вы можете использовать .call

do_sth.call(this);

3. Вы можете изменить его, чтобы ожидать параметр элемента:

function do_sth( el ) { console.log( el ) }
1 голос
/ 06 мая 2011

Вот как:

$('.button').click(function() {
        do_sth.call(this);
    });
});
0 голосов
/ 06 мая 2011

Затем напишите функцию do_sth, которая будет принимать элемент $ (this) в качестве параметра:

var do_sth = function($el) {
  console.log($el)
}

Затем выполните это:

$('.button').each(function(){
    var $that = $(this);
    $(this).click(function(){
        console.log($that);
        do_sth($that);
    });
});
0 голосов
/ 06 мая 2011

передать параметр вызываемой функции.

$('.button').each(function(){
    $(this).click(function(){
        console.log($(this));
        do_sth(this);
    });
});

var do_sth = function(button){
    console.log(button);
}

вот скрипка: http://jsfiddle.net/JfwNJ/

...