Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.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
Javascript 如果使用jqgrid中的内联添加按钮添加行,如何设置默认值_Javascript_Jquery_Jquery Ui_Jqgrid - Fatal编程技术网

Javascript 如果使用jqgrid中的内联添加按钮添加行,如何设置默认值

Javascript 如果使用jqgrid中的内联添加按钮添加行,如何设置默认值,javascript,jquery,jquery-ui,jqgrid,Javascript,Jquery,Jquery Ui,Jqgrid,如果使用表单添加行,下面的代码将为新行设置默认值。 若使用工具栏中的jqGrid内联添加按钮添加行,那个么这些方法将不会被调用和调用 未设置默认值 如何强制inlineadd执行与下面代码相同的逻辑 var lastSelectedRow; $grid.navGrid("#grid_toppager", { del: true, add: true, view: true, edit: true }, {}, { add

如果使用表单添加行,下面的代码将为新行设置默认值。 若使用工具栏中的jqGrid内联添加按钮添加行,那个么这些方法将不会被调用和调用 未设置默认值

如何强制inlineadd执行与下面代码相同的逻辑

var lastSelectedRow;
$grid.navGrid("#grid_toppager", { 
del: true,
add: true,
view: true,
edit: true
          }, 
          {},

       { 
       addedrow: 'beforeSelected',
       url: '/Grid/Add?_entity=Desktop',
       beforeInitData: function () {
         // todo: how to call this method from inline add
         var rowid = $grid.jqGrid('getGridParam', 'selrow');
         if (rowid === null) {
           alert( 'Select row before adding');
           return false;
           }
         },

       afterShowForm: function(formID) {
         // todo: how to set default values as this method sets from inline add
         var selRowData, 
            rowid = $grid.jqGrid('getGridParam', 'selrow');
         $('#' + 'Recordtype' + '.FormElement').val('Veerg');
         $('#' + 'Nait2' + '.FormElement')[0].checked = true;
         selRowData = $grid.jqGrid('getRowData', rowid);
         $('#' + 'Baas' + '.FormElement').val(selRowData.Baas);
         $('#' + 'Liigid' + '.FormElement').val(selRowData.Liigid);
       }
       );


$grid.jqGrid('inlineNav', '#grid_toppager', {
    addParams: {
        position: "beforeSelected", 
        rowID: '_empty',
        useDefValues: true,
        addRowParams: {
            keys: true,
            onEdit :  onInlineEdit
        }
    },

    editParams: {
        editRowParams: {
            onEdit : onInlineEdit
            }
    },

   add: true,
   edit: false,
   save: true,
   cancel: true
}); 

function onInlineEdit(rowId) {
  if (rowId && rowId !== lastSelectedRow) {
        cancelEditing($grid);
        lastSelectedRow = rowId;
    }
  }
更新

我试过密码

 $grid.jqGrid('inlineNav', '#grid_toppager', {
    addParams: {
        position: "beforeSelected", 
        rowID: '_empty',
        useDefValues: true,
        addRowParams: {
            keys: true,
            extraparam: { _dokdata: FormData },
            onSuccess : function (jqXHR) { 
alert('addp oncuss');
              jqXHRFromOnSuccess=jqXHR;
              return true;
              },
            afterSave: function (rowID) {
alert('afeesave addp ');
              cancelEditing($grid);
                  afterDetailSaveFunc(rowID,jqXHRFromOnSuccess);
              jqXHRFromOnSuccess=null; 
              },
            onError: errorfunc,
            afterRestore : setFocusToGrid,
            oneditfunc  : function (rowId) {
              var selRowData, selRowId ;
              if (rowId && rowId !== lastSelectedRow) {
                cancelEditing($grid);
                selRowId = $grid.jqGrid('getGridParam', 'selrow');
                if (selRowId ) {
                   selRowData = $grid.jqGrid('getRowData', selRowId ); 
                   $('#' + rowId + '_Reanr' ).val(selRowData.Reanr); 
                  }
                lastSelectedRow = rowId;
                }
             }
        }
    }
);
仅调用oneditfunc func。如何强制还调用onSuccess、afterSave、onError等方法

更新2

我从回答中推荐的github向jqGrid添加了补丁,并尝试了

$.extend( jQuery.jgrid.inlineEdit, {
  addParams: { 
    position: "beforeSelected", 
    rowID: '<%= EntityBase.NewRowIdPrefix %>',
    useDefValues: true,
    addRowParams: {
      keys: true,
      extraparam: { _dokdata: FormData },
      onSuccess : function (jqXHR) { 
        jqXHRFromOnSuccess=jqXHR;
        return true;
        },
      afterSave: function (rowID) {
              cancelEditing($grid);
              <% if (Model is RowBase ) { %>
                  afterDetailSaveFunc(rowID,jqXHRFromOnSuccess);
                <% } else { %>
                  afterGridSaveFunc(rowID,jqXHRFromOnSuccess);
                <% } %>
              jqXHRFromOnSuccess=null; 
              },
      onError: errorfunc,
      afterRestore : setFocusToGrid,
      oneditfunc : function (rowId) {
        if (rowId && rowId !== lastSelectedRow) {
          cancelEditing($grid);
          lastSelectedRow = rowId;
          }  
        } 
      }
    }
} );
$.extend(jQuery.jgrid.inlineEdit{
addParams:{
位置:“选择之前”,
rowID:“”,
useDefValues:true,
addRowParams:{
凯斯:没错,
外部参数:{u-dokdata:FormData},
onSuccess:函数(jqXHR){
jqXHRFromOnSuccess=jqXHR;
返回true;
},
afterSave:函数(rowID){
取消编辑($网格);
afterDetailSaveFunc(rowID,jqXHRFromOnSuccess);
afterGridSaveFunc(rowID,jqXHRFromOnSuccess);
jqXHRFromOnSuccess=null;
},
onError:errorfunc,
恢复后:setFocusToGrid,
oneditfunc:函数(rowId){
if(rowId&&rowId!==lastSelectedRow){
取消编辑($网格);
lastSelectedRow=行ID;
}  
} 
}
}
} );

I此案例输入不终止内联添加。此代码中的所有参数都将被忽略。

您应该使用的
defaultValue
属性为新添加的行设置默认值。在当前文档中,您可以发现该选项仅在表单编辑模块中有效:

选项可以是字符串或函数。此选项仅在中有效 在添加模式下与editGridRow方法一起使用时的表单编辑模块。如果 定义输入元素,如果只有元素是 空的。如果在选择中使用,则应提供文本,而不是键。 此外,当使用函数时,函数应返回值

但是,如果您检查新方法的代码,您将看到

  • useDefValues
    选项的默认值为
    true
  • 该方法使用(请参阅)的
    defaultValue
    属性
  • 已更新:好的!现在我明白你的问题了。您在设置的
    editRowParams
    addRowParams
    部分中使用了错误的属性。正确答案是:

    $grid.jqGrid('inlineNav',TopPage选择器{
    addParams:{
    位置:“选择之前”,
    rowID:“\u empty”,
    useDefValues:true,
    addRowParams:{
    凯斯:没错,
    oneditfunc:onInlineEdit
    }
    },
    编辑参数:{
    凯斯:没错,
    oneditfunc:onInlineEdit
    },
    加:是的,
    编辑:false,
    保存:是的,
    取消:对
    });
    
    此外,您还可以使用新功能设置
    oneditfunc
    或其他内联编辑参数。该功能的实现并不完全正确,但您可以从github检查当前版本(请参阅),并在您的
    jquery.jqGrid.src.js
    版本中进行相同的修改。无论如何,我建议在发布下一版本的jqGrid后使用该功能。其优点是,您可以轻松设置
    editRow
    的选项,而不依赖于调用函数的位置(从
    inlineav
    “操作”
    格式化程序或任何其他方式)


    新的
    jqGridInlineEditRow
    事件功能(有关更多信息,请参阅)将允许您在
    onInlineEdit
    事件中执行类似于您现在所做的操作,而无需使用只能设置一次的
    oneditfunc

    非常感谢。有问题的代码从当前行检索默认值,如果未设置当前行,则不允许添加行。如何使用defaultValue实现这一点?@Andrus:代码可能会做不同的事情。像
    $('#'+'记录类型'+'.FormElement').val('Veerg')这样的行
    $('#'+'Nait2'+'.FormElement')[0]。选中=true是默认值的纯设置。由于其他设置,我不明白您为什么不在
    onEdit
    处理程序中进行设置(在您的情况下,在
    onlineedit
    函数中)?@Andrus:我不确定我是否理解您的问题。当前行的id是onInlineEdit的参数。编辑行中控件ID(文本框、复选框、选择等)的规则是
    rowid+''.'+colName
    like
    123\u Recordtype
    。您可以使用与在
    afterShowForm
    中设置值相同的方式设置控件中的值。我不明白为什么您需要手动设置输入字段的值(如
    $('#'+'Baas'+'.FormElement').val(selRowData.Baas)
    ),因为内联编辑已经可以这样做了。@Andrus:好!我现在知道你使用了错误的参数。我在答案后面附加了更新的部分。@Andrus:Yo使用了错误的参数名称。从中可以获得名称:
    onSuccess
    afterSave
    onError
    afterRestore
    ?在的文档中,您可以找到具有属性的
    editparameters
    oneditfunc
    successfunc
    url
    extraparam
    afteravefunc
    errorfunc
    restoreafterror
    mtype
    。你应该只使用名字。