jqGrid не может встроить редактирование

Я искал по всему Интернету решение моей простой проблемы (надеюсь), но, к сожалению, ничего не помогло! ..

Я начинаю с jqGrid, и я успешно сделал это, чтобы показать все мои данные массива образцов в таблице. Я хочу, чтобы иметь возможность редактировать столбцы «role» inline и сохранять их обратно в данные массива … Я использую структуру Zend и имею эту проблему:

Мои проблемы

Я вообще не могу редактировать данные. Я могу просто выбрать и выделить, как обычно, текстовая область не предоставляется.

Вот мой HTML (пожалуйста, убедитесь, что я использую правильные библиотеки):

<html> <head> <title>JqGrid Test</title> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> <link rel="stylesheet" type="text/css" media="screen" href="/js/jquery-ui-1.8.18.custom/css/ui-lightness/jquery-ui-1.8.18.custom.css" /> <link rel="stylesheet" type="text/css" media="screen" href="/js/jquery.jqGrid-4.4.0/css/ui.jqgrid.css" /> <script src="/js/jquery.jqGrid-4.4.0/js/jquery-1.7.2.min.js" type="text/javascript"></script> <script src="/js/jquery.jqGrid-4.4.0/js/i18n/grid.locale-en.js" type="text/javascript"></script> <script src="/js/jquery.jqGrid-4.4.0/js/jquery.jqGrid.min.js" type="text/javascript"></script> <script src="/js/test/index.js" type="text/javascript"> </script> <script src="/js/jquery-ui-1.8.18.custom/js/jquery-ui-1.8.18.custom.min.js" type="text/javascript"></script> <script src="/js/jquery.jqGrid-4.4.0/src/grid.loader.js" type="text/javascript"> </script> </head> <body> <table id="list" class="scroll"></table> <br /> </body> </html> 

Затем мой index.js :

 $(document).ready(function(){ var lastsel2; jQuery("#list").jqGrid({ datatype: "local", height: 250, colNames:['Role Id','name'], colModel:[ {name:'id',index:'id', width:60, sorttype:"int", editable: true}, {name:'name',index:'name', width:100, sortable:false,editable: true, edittype:"textarea", editoptions:{rows:"2",cols:"10" }, ], onSelectRow: function(id){ if(id && id!==lastsel2){ jQuery('#list').restoreRow(lastsel2); jQuery('#list').editRow(id,true); lastsel2=id; } }, caption: "Manipulating Array Data", }); var mydata = [ {id:"1",name:"test"}, {id:"2",name:"test2"}, {id:"3",name:"test3"}, {id:"4",name:"test"}, {id:"5",name:"test2"}, {id:"6",name:"test3"}, {id:"7",name:"test"}, {id:"8",name:"test2"}, {id:"9",name:"test3"} ]; for(var i=0;i<=mydata.length;i++) jQuery("#list").jqGrid('addRowData',i+1,mydata[i]); }); 

Что мне не хватает? Надеюсь, мой вопрос был ясен, и я благодарю и ценю в adv всем, кто отправляет ответ!

Related of "jqGrid не может встроить редактирование"

В коде, который вы опубликовали, есть много ошибок.

  • Вы никогда не должны использовать <html> без <!DOCTYPE html ... Это означает причудливый режим HTML. Более поздний HTML-код выглядит как XHTML. Поэтому вы должны использовать
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> 
  • Вы должны включить только одну версию любой библиотеки JavaScript. В вашем коде вы включили первый jQuery 1.8.2 (это тоже ошибка в атрибуте src . Это должно быть src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js" ), а затем включил jquery-1.7.2.min.js . Таким же образом вы включили first grid.locale-en.js и jquery.jqGrid.min.js а затем включили grid.loader.js который будет содержать один и тот же код jqGrid, но не сведен к минимуму.
  • Следующий момент не является реальной ошибкой, но вы можете удалить class="scroll" которые не используются jqGrid, поскольку многие версии.
  • В определении столбца 'name' содержится синтаксическая ошибка: вы должны включить } в конце определения столбца 'name' .
  • Вы используете for(var i=0;i<=mydata.length;i++) вместо for(var i=0;i<mydata.length;i++) . Использование addRowData для заполнения сетки плохое и медленное. Вам следует просто переместить код, который определяет mydata перед кодом, который создает jqGrid, и добавлять data: mydata качестве дополнительного параметра.
  • Если вы хотите реализовать локальное редактирование данных, вам нужно добавить дополнительный параметр editurl: "clientArray" в сетку.

Следующая проблема была основной причиной, по которой я написал свой ответ. Проблема в том, что вы определили редактируемый столбец 'id' в сетке. Проблема в том, что jqGrid использует внутренне "id" как атрибут id строки ( <tr> ), также известный как rowid. Поэтому вы должны переименовать столбец id в другое имя. Кроме того, вы должны id атрибут id во входных данных, которые будут использоваться как rowid.

Если вы предпочитаете хранить свое исходное имя "id" для столбца с пользовательскими данными и хотите, чтобы jqGrid использовал любое другое имя свойства, например "id1" например, как rowid, который вы должны включить

 localReader: {id: "id1"}, // needed for reading of the rowids prmNames: {id: "id1"} // needed for editing 

В случае, если mydata может выглядеть

 var mydata = [ {id: "1", id1: "10", name: "test"}, {id: "2", id1: "20", name: "test2"}, {id: "3", id1: "30", name: "test3"}, {id: "4", id1: "40", name: "test"}, {id: "5", id1: "50", name: "test2"}, {id: "6", id1: "60", name: "test3"}, {id: "7", id1: "70", name: "test"}, {id: "8", id1: "80", name: "test2"}, {id: "9", id1: "90", name: "test3"} ]; 

Здесь вы увидите демоверсию, которая фиксирует ваш исходный код. Он использует значения «10», «20», …, «90» ( id1 ) как rowids (значения атрибута id элементов <tr> ), и он использует id с вашими настраиваемыми данными, которые можно редактировать.