我想在 JQueryUI 小部件(First、Prev、Next、Last)中创建 4 个分页按钮,尽可能少地重复代码。我有一个这样的工作示例(在小部件工厂插件中的函数中):
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 和数据表。我想要一些更简单的东西(只是 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”方法(即使用一些适用于所有选定元素的聪明函数。