Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery EasyUI:确认/保存数据网格内联编辑_Jquery_Datagrid_Inline Editing_Jquery Easyui - Fatal编程技术网

jQuery EasyUI:确认/保存数据网格内联编辑

jQuery EasyUI:确认/保存数据网格内联编辑,jquery,datagrid,inline-editing,jquery-easyui,Jquery,Datagrid,Inline Editing,Jquery Easyui,我正在使用jquery&EasyUI从SQL数据库创建一个表。在此之后,我设法通过内联编辑使一些列可编辑,其中可能的单元格值由组合框给出。我有一个用于updateURL的php文件,现有内容的更新工作正常 我的问题如下:到目前为止,要确认单元格的编辑(在单击单元格并从组合框中选择值之后),用户必须单击表的其他行以触发更新脚本。如果表格只有一行,并且只有一列是可编辑的,则似乎无法确认更改(例如,按enter键) 有什么办法可以确认吗? 谢谢你的帮助 更新:我已经做到了这一点:在datagrid中

我正在使用jquery&EasyUI从SQL数据库创建一个表。在此之后,我设法通过内联编辑使一些列可编辑,其中可能的单元格值由组合框给出。我有一个用于updateURL的php文件,现有内容的更新工作正常

我的问题如下:到目前为止,要确认单元格的编辑(在单击单元格并从组合框中选择值之后),用户必须单击表的其他行以触发更新脚本。如果表格只有一行,并且只有一列是可编辑的,则似乎无法确认更改(例如,按enter键)

有什么办法可以确认吗? 谢谢你的帮助


更新:我已经做到了这一点:在datagrid中,通过组合框编辑的列是通过

<th field="..." data-options="formatter:...,
editor:{type:'combobox',options:{valueField:'...',textField:'...',url:'file.php'‌​,
onSelect: function (record) {*}}}">field</th>
字段
我相信我需要通过命令来保存/完成编辑,而不是使用asterik(*)。我使用了
endEdit
saveRow
,但没有成功。它是正确的位置(我用一个简单的警报测试了它),但不是正确的命令/语法。

为什么不使用网格附带的工具栏(带有保存/确认按钮)。单击按钮,可以显式触发edatagrid的更新事件

在您提到的链接中,您可以找到示例

解决了

需要加上星号的代码是:

var selectedrow = $('#dg_id').datagrid('getSelected');
var rowIndex = $('#dg_id').datagrid('getRowIndex', selectedrow);
$('#dg_id').datagrid('endEdit',rowIndex);

希望这对其他人也有帮助。

让我把我的解决方案留给谷歌。使用1.4.4版进行测试

基本上,您需要重写
editRow
方法,但EasyUI似乎设计得不是很好,内部结构完全没有文档记录。另外还有一个对hidden
focusEditor
函数的调用,所以我最终得到了这段代码。它使用触发
saveRow
,并允许您使用+,在多行编辑器中插入换行符。由于许多意外错误,我还通过单击其他行关闭了保存

$.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);
            }
        }
    });
};

据我所知,内联编辑功能是在中创建的。但我是一个初学者,不知道如何修改它们以保存编辑,而不是单击另一行。是的,我知道有可能添加一个按钮,但这需要在表格上方/下方有一个完整的工具栏。由于我有多个表,在一条垂直线上下,其中一些只有一行,我希望避免失去每个表的工具栏所需的垂直空间。但我不知道如何修改edatagrid javascript(如果这是可以查看的地方)。不过,谢谢你的帮助!否则,您可以显式调用datagrid的“endEdit”方法。如果combobox是最后一个编辑器列,在combobox的Onselect事件中,您可以调用endEdit。这将触发更新。这就是我正在尝试的,也是我当前失败的地方。我已经做到了这一点:
状态
和星号(*)的位置我已经放置了
endEdit
saveRow
,但是没有用。它是正确的位置(我用一个简单的
警报测试了它),但不是正确的命令。到目前为止,我已经用进度更新了这个问题。谢谢你的帮助,@Saigitha.P.S@赛吉塔,对不起,我不能对你的答案投赞成票,我还没有足够的声誉。无论如何谢谢你!