Я пытаюсь создать специальное событие jQuery, которое срабатывает при изменении связанного содержимого. Мой метод проверяет содержимое с помощью setInterval и проверяет, изменилось ли содержимое с прошлого раза. Если у вас есть лучший способ сделать это, дайте мне знать. Другая проблема заключается в том, что я не могу очистить интервал. В любом случае, мне нужен лучший способ проверить наличие изменений содержимого с помощью event.special.
(function(){
var interval;
jQuery.event.special.contentchange = {
setup: function(data, namespaces) {
var $this = $(this);
var $originalContent = $this.text();
interval = setInterval(function(){
if($originalContent != $this.text()) {
console.log('content changed');
$originalContent = $this.text();
jQuery.event.special.contentchange.handler();
}
},500);
},
teardown: function(namespaces){
clearInterval(interval);
},
handler: function(namespaces) {
jQuery.event.handle.apply(this, arguments)
}
};
})();
И свяжите это так:
$('#container').bind('contentchange', function() {
console.log('contentchange triggered');
});
Я получаю console.log «изменен контент», но не console.log «Запущен контент-обмен». Таким образом, очевидно, что обратный вызов никогда не срабатывает.
Я просто использую Firebug для изменения содержимого и запуска события, чтобы проверить его.
Обновление
Я не думаю, что я сделал это достаточно ясно, мой код на самом деле не работает. Я ищу то, что я делаю неправильно.
Вот готовый код для всех, кто заинтересован
(function(){
var interval;
jQuery.event.special.contentchange = {
setup: function(){
var self = this,
$this = $(this),
$originalContent = $this.text();
interval = setInterval(function(){
if($originalContent != $this.text()) {
$originalContent = $this.text();
jQuery.event.handle.call(self, {type:'contentchange'});
}
},100);
},
teardown: function(){
clearInterval(interval);
}
};
})();
Спасибо Mushex за помощь.