启用/禁用
根据文档状态和其他表格组件动态启用和禁用按钮通常非常有用。一个典型的例子是仅在选择表格中选定的行时,启用将对表格中选定行的操作执行操作的按钮!如果未选择任何行,则按钮在单击时不应执行任何操作(即,该按钮处于禁用状态)。
本示例利用 DataTables 的选择扩展程序 提供行选择。为 选择
事件添加侦听器,了解表格的行选择何时发生变化,从而可以通过 button().enable()
方法更改按钮的启用/禁用状态。
button()
方法是一个选择器方法,它会使用提供给它的信息来选择后续方法将对其执行操作的按钮。还有一个 buttons()
方法,可用于选择多个按钮(DataTables API 充分使用了这个复数/单数的区分)。
此示例中使用的 按钮选择器
是一个简单的索引选择器 - 按钮 1 和按钮 2。根据所选行数调整启用状态。仅在选择了唯一一行时启用第一个按钮,当选择一行或多行时启用第二个按钮。
请注意,选择库提供了多种按钮类型,例如 选中
和 仅选中一项
,它们提供了启用/禁用选项,无需使用此示例中所示的附加代码。
姓名 | 职位 | 办公地点 | 年龄 | 入职日期 | 工资 |
---|---|---|---|---|---|
Tiger Nixon | 系统架构师 | 爱丁堡 | 61 | 2011-04-25 | $320,800 |
Garrett Winters | 会计 | 东京 | 63 | 2011-07-25 | $170,750 |
Ashton Cox | 初级技术作者 | 旧金山 | 66 | 2009-01-12 | $86,000 |
Cedric Kelly | 高级 JavaScript 开发人员 | 爱丁堡 | 22 | 2012-03-29 | $433,060 |
Airi Satou | 会计 | 东京 | 33 | 2008-11-28 | $162,700 |
Brielle Williamson | 集成专家 | 纽约 | 61 | 2012-12-02 | $372,000 |
Herrod Chandler | 销售助理 | 旧金山 | 59 | 2012-08-06 | $137,500 |
Rhona Davidson | 集成专家 | 东京 | 55 | 2010-10-14 | $327,900 |
Colleen Hurst | JavaScript 开发人员 | 旧金山 | 39 | 2009-09-15 | $205,500 |
Sonya Frost | 软件工程师 | 爱丁堡 | 23 | 2008-12-13 | $103,600 |
Jena Gaines | 办公室经理 | 伦敦 | 30 | 2008-12-19 | $90,560 |
Quinn Flynn | 支持主管 | 爱丁堡 | 22 | 2013-03-03 | $342,000 |
Charde Marshall | 区域主管 | 旧金山 | 36 | 2008-10-16 | $470,600 |
Haley Kennedy | 高级营销设计师 | 伦敦 | 43 | 2012-12-18 | $313,500 |
塔季扬娜·菲茨帕特里克 | 区域主管 | 伦敦 | 19 | 2010-03-17 | $385,750 |
迈克尔·席尔瓦 | 营销设计师 | 伦敦 | 66 | 2012-11-27 | $198,500 |
保罗·拜尔德 | 首席财务官 (CFO) | 纽约 | 64 | 2010-06-09 | $725,000 |
格洛丽亚·利特尔 | 系统管理员 | 纽约 | 59 | 2009-04-10 | $237,500 |
布拉德利·格里尔 | 软件工程师 | 伦敦 | 41 | 2012-10-13 | $132,000 |
黛伊·里奥斯 | 人事主管 | 爱丁堡 | 35 | 2012-09-26 | $217,500 |
珍妮特·考德威尔 | 开发主管 | 纽约 | 30 | 2011-09-03 | $345,000 |
尤里·贝瑞 | 首席营销官 (CMO) | 纽约 | 40 | 2009-06-25 | $675,000 |
凯撒·万斯 | 售前支持 | 纽约 | 21 | 2011-12-12 | $106,450 |
多丽丝·怀尔德 | 销售助理 | 悉尼 | 23 | 2010-09-20 | $85,600 |
安吉莉卡·拉莫斯 | 首席执行官 (CEO) | 伦敦 | 47 | 2009-10-09 | $1,200,000 |
加文·乔伊斯 | 开发者 | 爱丁堡 | 42 | 2010-12-22 | $92,575 |
詹妮弗·张 | 区域主管 | 新加坡 | 28 | 2010-11-14 | $357,650 |
布伦登·瓦格纳 | 软件工程师 | 旧金山 | 28 | 2011-06-07 | $206,850 |
菲奥娜·格林 | 首席运营官 (COO) | 旧金山 | 48 | 2010-03-11 | $850,000 |
伊藤秀 | 区域营销 | 东京 | 20 | 2011-08-14 | $163,000 |
米歇尔·豪斯 | 集成专家 | 悉尼 | 37 | 2011-06-02 | $95,400 |
苏奇·伯克斯 | 开发者 | 伦敦 | 53 | 2009-10-22 | $114,500 |
普雷斯科特·巴特利特 | 技术撰稿人 | 伦敦 | 27 | 2011-05-07 | $145,000 |
加文·科尔特斯 | 团队负责人 | 旧金山 | 22 | 2008-10-26 | $235,500 |
马尔蒂娜·麦考瑞 | 售后支持 | 爱丁堡 | 46 | 2011-03-09 | $324,050 |
尤妮蒂·巴特勒 | 营销设计师 | 旧金山 | 47 | 2009-12-09 | $85,675 |
霍华德·哈特菲尔德 | 办公室经理 | 旧金山 | 51 | 2008-12-16 | $164,500 |
霍普·富恩特斯 | 文员 | 旧金山 | 41 | 2010-02-12 | $109,850 |
维维安·哈勒尔 | 财务主管 | 旧金山 | 62 | 2009-02-14 | $452,500 |
蒂莫西·穆尼 | 办公室经理 | 伦敦 | 37 | 2008-12-11 | $136,200 |
杰克逊·布拉德肖 | 总监 | 纽约 | 65 | 2008-09-26 | $645,750 |
奥利维亚·梁 | 支持工程师 | 新加坡 | 64 | 2011-02-03 | $234,500 |
布鲁诺·纳什 | 软件工程师 | 伦敦 | 38 | 2011-05-03 | $163,500 |
樱花·山本 | 支持工程师 | 东京 | 37 | 2009-08-19 | $139,575 |
索尔·沃尔顿 | 开发者 | 纽约 | 61 | 2013-08-11 | $98,540 |
芬·卡马乔 | 支持工程师 | 旧金山 | 47 | 2009-07-07 | $87,500 |
塞尔日·鲍德温 | 数据协同员 | 新加坡 | 64 | 2012-04-09 | $138,575 |
泽娜伊达·弗兰克 | 软件工程师 | 纽约 | 63 | 2010-01-04 | $125,250 |
佐里塔·塞拉诺 | 软件工程师 | 旧金山 | 56 | 2012-06-01 | $115,000 |
詹妮弗·阿科斯塔 | 初级 Javascript 开发者 | 爱丁堡 | 43 | 2013-02-01 | $75,650 |
卡拉·史蒂文斯 | 销售助理 | 纽约 | 46 | 2011-12-06 | $145,600 |
赫敏·巴特勒 | 区域主管 | 伦敦 | 47 | 2011-03-21 | $356,250 |
拉埃尔·格里尔 | 系统管理员 | 伦敦 | 21 | 2009-02-27 | $103,500 |
乔纳斯·亚历山大 | 开发者 | 旧金山 | 30 | 2010-07-14 | $86,500 |
谢德·德克尔 | 区域主管 | 爱丁堡 | 51 | 2008-11-13 | $183,000 |
迈克尔·布鲁斯 | JavaScript 开发人员 | 新加坡 | 29 | 2011-06-27 | $183,000 |
唐娜·斯奈德 | 客户支持 | 纽约 | 27 | 2011-01-25 | $112,000 |
姓名 | 职位 | 办公地点 | 年龄 | 入职日期 | 工资 |
- Javascript
- HTML
- CSS
- Ajax
- 服务端脚本
- 注释
下面显示的 Javascript 用于初始化此示例中显示的表格
var table = $('#example').DataTable({ layout: { topStart: { buttons: [ { text: '行选择数据', action: function (e, dt, node, config) { alert( '行数据: ' + JSON.stringify(dt.row({ selected: true }).data()) ); }, enabled: false }, { text: '计算已选择行数', action: function (e, dt, node, config) { alert('行数: ' + dt.rows({ selected: true }).count()); }, enabled: false } ] } }, select: true }); table.on('select deselect', function () { var selectedRows = table.rows({ selected: true }).count(); table.button(0).enable(selectedRows === 1); table.button(1).enable(selectedRows > 0); });
var table = new DataTable('#example', { layout: { topStart: { buttons: [ { text: '行选择数据', action: function (e, dt, node, config) { alert( '行数据: ' + JSON.stringify(dt.row({ selected: true }).data()) ); }, enabled: false }, { text: '计算已选择行数', action: function (e, dt, node, config) { alert('行数: ' + dt.rows({ selected: true }).count()); }, enabled: false } ] } }, select: true }); table.on('select deselect', function () { var selectedRows = table.rows({ selected: true }).count(); table.button(0).enable(selectedRows === 1); table.button(1).enable(selectedRows > 0); });
除了上述代码之外,还加载了以下 Javascript 库文件供此示例使用
下面显示的 HTML 是原始 HTML 表格元素,它经过 DataTables 增强之前
为了正确显示表格,此示例使用了一小部分除了从库文件中加载的额外 CSS(见下方)。下面显示使用了的额外 CSS
为使用此示例中加载了以下 CSS 库文件,以提供表格样式
此表格通过 Ajax 加载数据。下面显示了最新已加载的数据。随着加载额外的任何数据,此数据将自动更新。
为该表格执行服务器端处理使用的脚本如下所示。请注意,这只是一个使用 PHP 的示例脚本。服务器端处理脚本可以用任何语言编写,并使用 DataTables 文档中所述的协议。