2014-09-12 3 views
0

Я быстро написал этот плагин jquery. Когда я передаю ему элемент $, он соскальзывает, но затем он ломается на this.empty(), заявляя, что это не функция. В чем проблема?Пользовательский плагин jQuery

(function ($) { 
$.fn.slideUpEmpty = function(t, callback){ 
     this.slideUp(t, function(){ 
      this.empty(); 
      if(callback){ 
       callback(); 
      } 
     }); 
    } 

}(jQuery)); 

Применение

$('#somediv').slideUpEmpty(500, function(){ 

}); 
+0

Вы пробовали $ (this) .empty()? –

+0

Нет, потому что я не понимаю, почему slideUp может принять это без $() – user3822370

+0

Внутри метода плагина jQuery 'this' относится к объекту jQuery. Внутри метода jQuery * callback *, 'this' относится к элементу DOM. –

ответ

4

Внутри slideUp обратного вызова, this относится к DOM элемента, как описано в documentation:

Обратный вызов не посылается никаких аргументов, но this установлен на анимированный элемент DOM.

Так что, если вы хотите, чтобы вызвать метод JQuery на него, вы должны передать его JQuery первым:

$(this).empty(); 

Это было опустошить каждый элемент после того, как это было сделано оживляющий, так как обратный вызов выполняется для каждого выбранного элемента.

Если вы хотите, чтобы очистить их только после того, как все они сделаны анимации, вы можете использовать promise:

this.slideUp(t).promise().done(function() { 
    this.empty(); // no `$(this)` here, `this` is already a jQuery object 
}); 

Это выполняет обратный вызов, переданный .done только раз после всех элементов готовой анимировать.

Смежные вопросы