Jquery .click () превзойти это - PullRequest
2 голосов
/ 02 января 2012

В методе моего класса у меня есть:

this.background.click(function() {
    this.terminate();
});

Очевидно, this.terminate(); не работает, потому что this относится к this.background внутри jquery.click функции. Как мне написать для получения this от высшего класса?

Ответы [ 4 ]

5 голосов
/ 02 января 2012

Объявите переменную, содержащую внешний this:

var self = this;
this.background.click(function() {
    self.terminate();
});
2 голосов
/ 02 января 2012

Попробуйте:

this.background.click( $.proxy( this.terminate, this ) );
0 голосов
/ 01 июля 2016

Использовать связывание

 $(".detailsbox").click(function(evt){
     test.bind($(this))();
  });
  function test()
  {
     var $this = $(this);
  }
0 голосов
/ 02 января 2012

вы можете сделать так, как сказал @Andrew, или можете сделать «yourObject.terminate ();»

Например:

var yourObject = {
    background: $("#background"),
    terminate: function ()
    {
        alert("do something...");
    },
    addEvents: function ()
    {
        this.background.click(function()
        {
            yourObject.terminate();
        });
    }
};


$(function()
{
    yourObject.addEvents();
});

для улучшения, убедитесь, что селектор «background» существует (если javascript загружается до html), и используйте jquery «live ()» или «Delegate ()» или «on ()» для вложения событий в элементы.

...