我正在使用jquery& EasyUI从SQL数据库创建表。我已经设法通过在tutorial之后的内联编辑使一些列可编辑,其中可能的单元格值由组合框给出。我有一个用于updateURL的php文件,现有内容的更新工作正常。
我的问题如下:到目前为止,要确认单元格的编辑(在单击单元格并从组合框中选择一个值后),用户必须单击表格的其他一行才能触发更新-脚本。如果表格只有一行且只有一列可编辑,则似乎无法确认更改(例如按Enter键)。
有没有办法确认? 谢谢你的帮助!
更新:我走到这一步:在数据网格中,通过组合框编辑的列是通过
创建的<th field="..." data-options="formatter:...,
editor:{type:'combobox',options:{valueField:'...',textField:'...',url:'file.php',
onSelect: function (record) {*}}}">field</th>
我相信我需要通过命令来代替asterik(*)来保存/完成编辑。我使用了endEdit
,saveRow
,但没有成功。它是正确的地方(我用简单的警报测试它),但没有正确的命令/语法。
答案 0 :(得分:1)
解决!
需要用于星号的代码是:
var selectedrow = $('#dg_id').datagrid('getSelected');
var rowIndex = $('#dg_id').datagrid('getRowIndex', selectedrow);
$('#dg_id').datagrid('endEdit',rowIndex);
希望这对其他人也有帮助。
答案 1 :(得分:1)
让我在这里为Google留下我的解决方案。测试版本1.4.4
基本上你需要覆盖editRow
方法,但是EasyUI似乎设计得不是很好,并且内部完全没有文档记录。还有一个隐藏focusEditor
函数的调用,所以我最终得到了这段代码。它使用&lt; Enter&gt;触发saveRow
并允许您在多行编辑器中使用&lt; Shift&gt;插入换行符+&lt; Enter&gt;。由于许多意外错误,我也通过点击其他行来关闭保存。
$.fn.edatagrid.methods.editRow = function(jq, index){
return jq.each(function(){
var dg = $(this);
var opts = $.data(this, 'edatagrid').options;
var editIndex = opts.editIndex;
if (editIndex != index){
// -------------------- ✂ --------------------
// Lost focus
if (editIndex != -1) {
dg.edatagrid('cancelRow');
return;
}
// -------------------- ✂ --------------------
if (dg.datagrid('validateRow', editIndex)){
if (editIndex>=0){
if (opts.onBeforeSave.call(this, editIndex) == false) {
setTimeout(function(){
dg.datagrid('selectRow', editIndex);
},0);
return;
}
}
dg.datagrid('endEdit', editIndex);
dg.datagrid('beginEdit', index);
if (!dg.edatagrid('isEditing', index)){
return;
}
opts.editIndex = index;
// -------------------- ✂ --------------------
// Based on focusEditor() function
var target;
var that = this;
var editor = $(this).datagrid('getEditor', {index:opts.editIndex});
if (editor){
target = editor.target;
} else {
var editors = $(this).datagrid('getEditors', opts.editIndex);
if (editors.length){
target = editors[0].target;
}
}
if (target){
var field = $(target).hasClass('textbox-f') ? $(target).textbox('textbox') : $(target);
field.focus();
field.bind('keydown', function(e) {
if (e.which == 13 && !event.shiftKey) {
$(that).edatagrid('saveRow');
}
});
}
// -------------------- ✂ --------------------
var rows = dg.datagrid('getRows');
opts.onEdit.call(this, index, rows[index]);
} else {
setTimeout(function(){
dg.datagrid('selectRow', editIndex);
}, 0);
}
}
});
};
答案 2 :(得分:0)
为什么不使用随网格附加的工具栏(带有保存/确认按钮)。单击按钮,您可以显式触发edatagrid的更新事件。
在您自己引用的链接中,您可以找到示例