バインドされているコンテンツが変更されたときにトリガーされる jQuery の特別なイベントを作成しようとしています。私の方法は、内容を asetInterval
で確認し、内容が前回から変更されているかどうかを確認します。それを行うためのより良い方法があれば、私に知らせてください。別の問題は、間隔をクリアできないように見えることです。とにかく、私が必要としているのは、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 に感謝します。