EasyUI Datagrid中,某列為<select>,根據選中值動態調整同行操作列按鈕數量/類型。
<select onchange="schr(this)">
<option value="1">類型A</option>
<option value="2">類型B</option>
</select>
function schr(selectElem) {
// 1. 獲取所在行TR
var $tr = $(selectElem).closest('tr');
// 2. 獲取操作列TD(最後一列)
var $td = $tr.find('td:last'); // 注意:若非最後一列需調整選擇器
// 3. 根據選中值動態構建按鈕
var val = $(selectElem).val();
var buttonsHtml = '';
if (val === '1') {
buttonsHtml = '<a href="#" class="easyui-linkbutton" onclick="edit(this)">編輯</a>';
} else if (val === '2') {
buttonsHtml = '<a href="#" class="easyui-linkbutton" onclick="edit(this)">編輯</a> ' +
'<a href="#" class="easyui-linkbutton" onclick="del(this)">刪除</a>';
}
// 4. 更新單元格內容並重新解析EasyUI
$td.html(buttonsHtml).find('a').linkbutton();
}
closest('tr'):向上查找最近的行元素find('td:last'):定位操作列(需確認列位置).linkbutton():關鍵步驟,將動態插入的HTML初始化為EasyUI組件onclick屬性或.on()委託// 使用formatter函數統一管理(推薦)
$('#dg').datagrid({
columns: [[
{field: 'type', title: '類型', width: 100,
formatter: function(value, row) {
return '<select onchange="typeChange(this,' + row.id + ')">...</select>';
}},
{field: 'action', title: '操作', width: 200,
formatter: function(value, row) {
return generateButtons(row.type, row.id);
}}
]]
});
function typeChange(selectElem, rowId) {
// 更新數據源
$('#dg').datagrid('updateRow', {
index: $('#dg').datagrid('getRowIndex', rowId),
row: { type: $(selectElem).val() }
});
// 刷新操作列
$('#dg').datagrid('refreshRow', rowIndex);
}
.off().on()或檢查.data('bound')formatter模式而非逐行操作DOM核心模式:DOM定位 → HTML構建 → 組件初始化,掌握此模式應對所有動態列需求。