[英]Free jqGrid - Row not entering edit
我正在为一个小项目使用Free jqGrid 4.13.0,我似乎无法使行从操作按钮和inlineNav
编辑按钮进入编辑模式。
这些行通过“添加”按钮添加,但是它们不进入编辑模式。 尝试通过使用任何按钮进入编辑模式都不起作用。
难道是在HTML中输入css / js文件的顺序? 我是否缺少js文件?
我目前有2个几乎相同的网格,但它们都不起作用。
<link rel="stylesheet" type="text/css" href="jqueryUI/jquery-ui.css"></link>
<link rel="stylesheet" type="text/css" href="jqueryUI/jquery-ui.min.css"></link>
<link rel="stylesheet" type="text/css" href="jqueryUI/jquery-ui.theme.css"></link>
<link rel="stylesheet" type="text/css" media="screen" href="jqueryGrid/css/ui.jqgrid.css"></link>
<link rel='stylesheet' href='css/bootstrap.css'></link>
<link rel="stylesheet" type="text/css" href="css/cascade.css" />
<script src="jquery/jquery-1.12.1.min.js" type="text/javascript"></script>
<script src="jqueryUI/jquery-ui.min.js" type="text/javascript"></script>
<script src="jqueryGrid/js/i18n/grid.locale-en.js" type="text/javascript"> </script>
<script src="jqueryGrid/js/jquery.jqgrid.min.js" type="text/javascript"> </script>
<script src="customerGrid.js" type="text/javascript" ></script>
<script src="customerOrderGrid.js" type="text/javascript" ></script>
//// customerGrid.js
文件:
$(function() {
var grid = $("#customersGrid");
grid.jqGrid({
url: "/LicentaREST/rest/customers/getCustomersGrid",
mtype: "POST",
datatype: "json",
ajaxGridOptions: {contentType: 'application/json; charset=utf-8'},
serializeGridData: function (postData) {
if (postData.searchField === undefined) postData.searchField = null;
if (postData.searchString === undefined) postData.searchString = null;
if (postData.searchOper === undefined) postData.searchOper = null;
return JSON.stringify(postData);
}
},
colModel: [
{name: 'ID', index: 'id', width: 55, hidden: true},
{name: 'Name', index: 'name', width: 80, align: 'right', search: false},
{name: 'Phone', index: 'phone', width: 90},
{name: 'Address', index: 'address', width: 80, align: 'right', search: false},
{name: 'Client Since', index: 'clientSince', width: 80, align: 'right', search: false},
{name: 'Total Orders', index: 'totalOrders', width: 80, align: 'right', search: false},
{name: 'Total Ammount Orders', index: 'totalAmmountOrders', width: 80, align: 'right', search: false},
{name: 'Canceled Orders', index: 'canceledOrders', width: 80, align: 'right', search: false},
{name: 'Black Listed Status', index: 'blackListed', width: 80, align: 'right', search: false},
],
ondblClickRow: function (rowid) {
$.ajax({
type: "POST",
url: "/LicentaREST/rest/getCustomerOrders",
data: JSON.stringify(rowid),
success: function (response) {
if (response.errorCode == 0) {
customersOrdersGrid.jqGrid('clearGridData').jqGrid('setGridParam', 'data', response.data);
}
else {
}
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
}
});
},
pager: "#customersPager",
rowNum: 15,
rowList: [15,50, 100, 250,500],
rownumbers: true,
sortname: 'id',
sortorder: 'desc',
viewrecords: true,
caption: 'Customers',
height: "330",
autowidth: true
});
grid.jqGrid('inlineNav', '#customersPager',
{
add: true,
edit: false,
save: false,
cancel: false,
addicon: 'ui-icon-plus',
addtext: 'Add',
addedrow: 'last'
});
});
首先,我严格建议使用发布的最新免费jqGrid版本。 当前是4.13.2。 它包含4.13.0版中现有的一些小错误修复。 所有修复程序都与您的问题无关。
我在您的代码中看到以下问题:
editable: true
网格列中的editable: true
属性,用户应该可以对其进行编辑。 id
列,并使用cmTemplate: { editable: true }
选项在网格的所有列中设置editable: true
属性。 如果您在jqGrid的大多数列中使用其他一些属性,例如width: 80, align: 'right', search: false
那么最好将这些值移动到cmTemplate
: cmTemplate: { editable: true, autoResizable: true, width: 80, align: 'right', search: false}
,它指定colModel
属性的默认值。 您应该跳过在colModel
指定属性,而覆盖其他列中的属性。 例如,您应该继续在phone
栏中指定width: 90
。 colModel
的属性似乎是错误的。 您没有包括从服务器返回的任何测试数据(来自url: "/LicentaREST/rest/customers/getCustomersGrid"
),但是似乎您混合了colModel
的name
, index
和label
属性的含义。 name
类似于列的ID。 它不能有空格。 像name: 'Black Listed Status'
这样的值肯定是错误的。 您的意思可能是label: 'Black Listed Status'
。 您用于index
属性的值可能应该是name
属性的值。 严格建议完全避免指定任何index
属性(如果确实需要)。 因此label: 'Black Listed Status', name: 'blackListed'
像label: 'Black Listed Status', name: 'blackListed'
所有其他列一样label: 'Black Listed Status', name: 'blackListed'
name: 'Black Listed Status', index: 'blackListed'
可能应该更改为label: 'Black Listed Status', name: 'blackListed'
。 pager: true
而不是pager: "#customersPager"
并从inlineNav
跳过'#customersPager'
参数。 您可以从页面的HTML标记中删除不需要的<div id="customersPager"></div>
,并稍微简化代码。 height: "330"
(正确的是height: 330
)以使用默认的height: "auto"
。 rowNum
值将定义案例中网格的高度。 默认设置height: "auto"
不是在所有情况下的最佳选择,而是在大多数情况下的最佳选择。 jquery-ui.css
, jquery-ui.min.css
和jquery-ui.theme.css
是错误的。 仅包含jquery-ui.min.css
就足够了。 除了包含ui.jqgrid.css
您还可以包含ui.jqgrid.min.css
。 您应该删除grid.locale-en.js
因为文件jquery.jqgrid.min.js
已经包含了grid.locale-en.js
en-US
所有设置。 iconSet: "fontAwesome"
选项。 它改善了网格中显示的图标的外观。 您应该删除addicon: 'ui-icon-plus'
从看涨期权inlineNav
。 如果使用默认的jQuery UI图标,则为默认值;如果使用Font Awesome图标,则该值为错误。 inlineNav
的调用可以减少为grid.jqGrid('inlineNav', {edit: false, save: false, cancel: false, addtext: 'Add', addParams: { position: 'last' }}
ondblClickRow
使用的变量customersOrdersGrid
似乎未定义。 我建议您包括"use strict";
作为$(function() {...});
的第一条语句$(function() {...});
函数查找此类错误更容易。 loadonce: true
选项,如果总行数不够大,请立即返回所有数据 。 例如,小于1000或小于10000。 该演示可用于测试每页4000行,13列和20行的网格的本地分页,排序和筛选的性能。 另一个演示甚至使用了40000行,如果您使用Chrome,Firefox或Edge等现代网络浏览器,它也可以非常快速地工作。 您应该考虑将数据发送到服务器的时间以及操作的所有开销。 loadonce: true
的用法在大多数情况下都简化了服务器代码和客户端代码,并提高了网格的责任感。 确切的选择仍然取决于网格中的总行数。 对于大量的行来说,这将是不好的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.