2017-01-30 2 views
0

いくつかのFree JQGridがあり、新しい行の追加に問題があります。 inlineNav(ADD)のアイコンをクリックすると、新しい行が表示され、初めてSAVEアイコンをクリックすると正常に動作します。しかし、2行目を追加すると、inlineNavのSave-butttonは機能しません。行のEnterキーが機能します。グリッド全体をリロードした後、もう一度動作します。フリーJQGrid - inlineNavのsave-buttonが2行目を追加するときに機能しない

jQuery.extend($.jgrid.defaults,{ 
    autowidth: true, pager:true, pgbuttons:false, pginput:false, 
    pgtext:false, datatype: "json", mtype: "POST",  
    rownumbers:true, rowNum:9999,  
    postData: {"savestate_encrypted" : function() {return $("input[name='savestate_encrypted']").val();}}, 

    ondblClickRow: function (rowid, status, e) { 
      var $self = $(this), savedRow = $self.jqGrid("getGridParam", "savedRow"); 
      if (savedRow.length > 0 && savedRow[0].id !== rowid) { 
       $self.jqGrid("restoreRow", savedRow[0].id); 
      } 
      $self.jqGrid("editRow", rowid, { focusField: e.target }); 
     }, 
}); 

グリッド自体::

には、以下の

いくつかのデフォルトのグリッドのコードで、私は考え出した

jQuery("#grid").jqGrid({ 
     url:"....", 
     jsonReader: {root: "resourceList"}, 
     height: 500, 
     cmTemplate: { editable: true}, 
     inlineEditing: {keys: true}, 
     editurl: "....", 
     colModel:[ //Define Table Columns 
       {name: "name", label:"Name", key:true, hidden:false}, 
       {name: "activeJobs", label:"aktive Jobs", width:250} 
     ], 
    }).jqGrid("navGrid", {refresh:true, edit:false, del:true, search:false, add:false}) 
     .jqGrid("inlineNav", {save:true, edit:true, add:true})        
</script> 

その線15300(ごめんありませんどのようにブランチバージョンを見つけるために知っている - 30日。2017年)グリッドソースでは、 "var ind"をfalseに設定し、ボタンをクリックすると、Enterキーが完璧に動作する

var tmp = {}, tmp2 = {}, postData = {}, editable, k, fr, resp, cv, savedRow, ind = $self.jqGrid("getInd", rowid, true), $tr = $(ind), 
     opers = p.prmNames, errcap = getRes("errors.errcap"), bClose = getRes("edit.bClose"), isRemoteSave, isError, 
     displayErrorMessage = function (text, relativeElem).... 

速い解決策として、イベントでサブブライドし、グリッド全体をリロードしたかったのです。しかし、subscribe()は廃止されているようです(古いストラットタググリッドからjavascriptへの切り替えが行われていますが、バインドは正しい方法だと思いますが、どのイベントですか?

追加-----------------

私は、AjaxとJsonなしで同様の問題を表示する作業コードを作成しました。[追加]をクリックすると、値を入力し、[保存]を選択します。 inlineNavバーですべてがOKですが、再度、ADDの値を入力し、[保存]を選択押して、編集モードを開いたままになります。あなたが入力キーを使用している場合は代わりにそれが動作するSAVEが-BTN。

<!DOCTYPE html> 
<html lang="de"><head> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <script src="js/jquery-3.1.1.min.js"></script> 
    <script src="js/jquery-ui.min.js"></script> 
    <script src="js/jquery.jqgrid.src.js"></script> 
    <link rel="stylesheet" href="js/jquery-ui.min.css"> 
    <link rel="stylesheet" href="js/ui.jqgrid.min.css"> 
</head> 



<script type="text/javascript"> 
/* DEFAULTS */ 
jQuery.extend($.jgrid.defaults,{ 
    autowidth: true, // nutzt die ganze verfügbare Breite 
    pager:true,   // Fusszeile - 
    pgbuttons:false, // - ohne Seitenkontrollbuttons 
    pginput:false,  // - ohne Eingabefeld 
    pgtext:false,  // - ohne Text 
    rownumbers:true, // immer Zeilennummern 
    rowNum:9999,  // bis zu 9999 Zeilen 

    ondblClickRow: function (rowid, status, e) { 
      var $self = $(this), savedRow = $self.jqGrid("getGridParam", "savedRow"); 
      if (savedRow.length > 0 && savedRow[0].id !== rowid) { 
       $self.jqGrid("restoreRow", savedRow[0].id); 
      } 
      $self.jqGrid("editRow", rowid, { focusField: e.target }); 
     }, 
}); 



// For JSON Response 
/* jQuery.extend($.jgrid.inlineEdit,{ 
    restoreAfterError:false, 
    errorfunc: function(response) 
    { 
     var resp = response; 
     alert("error7"); 
     return false; 
    }, 
    successfunc: function(response) 
    { 
     var resp = response; 
     var hasNoError = true; 
//  var hasNoError = (resp.responseJSON.actionErrors.length == 0); 
     return hasNoError; 
    } 
}); 
*/ 

function dataset() { 
    "use strict"; 
    var mydata2 = [ 
      { id: "10", name: "test" , value: "5"}, 
      { id: "20", name: "test20", value: "5"}, 
      { id: "30", name: "test30", value: "5"}, 
      { id: "40", name: "test40", value: "5"}, 
      { id: "50", name: "test50", value: "5"}, 
     ]; 
    return mydata2; 
}; 
</script> 



<body> 
    <table id="grid"></table> 
    <script type="text/javascript"> 
     jQuery("#grid").jqGrid({ 
       data: dataset(), 
       colModel: [ 
        { name: "id", label:"ID"}, 
        { name: "name", label:"NAME", align: "center" }, 
        { name: "value", label:"VALUE", align: "center" } 
       ], 
       cmTemplate: { editable: true, autoResizable: true }, 
      }).jqGrid("navGrid", {refresh:true, edit:false, del:true, search:false, add:false}) 
       .jqGrid("inlineNav", {save:true, edit:true, add:true})        
    </script> 
</body></html> 
+0

グラナダハノーバーアンドレアス!正確なコードを投稿してください。無料のjqGridでエラーが見つかった場合は、問題を再現するために使用できます。 'ind 'は' '編集のDOM要素に初期化する必要があるため、 'var ind = false;'の設定は解決策ではありません。 'inlineNav'に関して複数の行を追加することで問題を再現できませんでした。少なくともいくつかの条件の下で、いくつかのバグが存在する場合は、それを修正するのが良いでしょう。 – Oleg

+0

Danke -Grusszurück:-) 無料のJQGridサンプルの1つを修正し、エラーを再現してみます。 1つのアイデア:私たちはJQuery 3.3.1を使用しています - すべてのサンプルが2.xまたは1.xバージョンを持っていますが、明日まで待ってください - 私は生産バグを修正する必要があります:-( –

+0

無料jqGridはケースのjQuery 3.3.1をサポートしています。 [デモ](例:http://www.ok-soft-gmbh.com/jqGrid/OK/customSortIcons-fa4_4.13.6.htm)インライン編集には '' inlineNav''と '' formatter: ''アクション ''を使います – Oleg

答えて

0

私が正しく理解していればあなたの問題は、保存した後にグリッドをリロードしたいということです。あなたは目的のためにjqGridInlineAfterSaveRowイベントを使用することができます:

jQuery("#grid").on("jqGridInlineAfterSaveRow", function() { 
    setTimeout(function() { 
     jQuery("#grid").trigger("reloadGrid"); 
    }, 0); 
}); 
関連する問題