私はこのようなことをすることに慣れています:
$(some_elements)
.filter(function() { return $(this).jqmData("locked") !== true; })
.jqmData('locked', true )
.each( function(){
// stuff
});
そのため、フィルター呼び出しはすべての「ロック解除された」要素を選択し、それらに対して関数を実行してロックするため、次回は除外されます。
現在、ウィジェットファクトリー関数内でこのフィルターを使用しようとしています:
...
_create: function() {
var self = this;
self.refresh( true );
},
refresh: function ( create ) {
...
$filter
.submit( function( e ) {
e.preventDefault();
search.blur();
})
.bind( "submit", function() {
return false;
})
.filter(function() { return this.getAttribute( "data-override" ) !== false; })
.find( "input" )
.bind( "keyup change input", self.filter( e, kids ) )
.end()
.end()
.prepend( o.target || $( container ) );
},
...
ここで使用しているとき、 の呼び出しによって関数がfilter()
再トリガーされ、_create
その理由がわかりません。フィルターを省略しても、すべて正常に機能するため、フィルター呼び出しに含まれている必要があります。
質問:
filter() 関数で何が間違っていますか?
編集:
したがって、これはチェーンされていませんが機能します:
$filter
.submit( function( e ) {
e.preventDefault();
search.blur();
})
.prependTo( $( o.target ) || $( el ) );
if ( $(this).jqmData("override") === false ) {
$filter
.find( "input" )
.bind( "keyup change input", function() {
self.filter( e, kids );
});
}
これはしませんが(再起動します_create
):
$filter
.submit( function( e ) {
e.preventDefault();
search.blur();
})
.filter( function() {
console.log($(this).data("override"))
return $(this).data("override");
})
.find("input")
.bind( "keyup change input", function() {
self.filter( e, kids );
})
.end()
.end()
.prependTo( $( o.target ) || $( el ) );