JQueryUI ウィジェット内に 4 つのページング ボタン (First、Prev、Next、Last) を作成し、コードの繰り返しをできるだけ少なくしたいと考えています。次のような実例があります (ウィジェット ファクトリ プラグインの関数内):
var pager = document.createElement( 'span' );
var names = ['start','prev','next','end'];
var labels = ['First','Prev','Next','Last'];
for (var i = 0; i < names.length; i++) {
var pagerButton = document.createElement( 'button' );
$(pagerButton).button({icons: { primary: "ui-icon-seek-" + names[i]}, label: labels[i]});
$(pagerButton).attr('name', names[i]);
pager.appendChild(pagerButton);
this._on(pagerButton, {
click: function(event) {
alert('You clicked ' + event.target.name);
}
});
}
this.element.find('.pager').empty().append(pager);
これには私が必要とする機能がありますが、JQuery でこれを行うにはもっと簡潔な方法が必要だと思います。
注意: 注意すべき点:
- 当然、アラートはより便利な機能に置き換えられます。
- 多言語が必要な場合に備えて、名前とラベルを分けてください。
- jqGrid と datatables を見てきました。もっと単純なもの (ajax、ページング、ソートのみ) が必要ですが、これは私にとって学習課題です (仕事用ではありません)。サードパーティの JQuery ライブラリの推奨事項は必要ありません。
- 上記のコード スニペットで犯した異端を遠慮なく指摘してください。
更新 さて、私はイベント宣言をループから抜け出す方法を考え出しました:
this._on(pager, {
'click button': function(event) {
alert('You clicked ' + event.currentTarget.name);
}
});
(currentTarget は提案どおりに使用されます)。
それは私に残します:
for (var i = 0; i < names.length; i++) {
var pagerButton = document.createElement( 'button' );
$(pagerButton).button({icons: { primary: "ui-icon-seek-" + names[i]}, label: labels[i]});
$(pagerButton).attr('name', names[i]);
pager.appendChild(pagerButton);
}
これはおそらく問題ありません。「よりjquery」な方法があるかもしれないと思っただけです(つまり、選択したすべての要素に適用される巧妙な関数のいくつかを使用します.