触发编辑表单时出现jQGrid错误



我使用的是最新版本的免费jQGrid,以及jQuery Migrate 1.4.1(1.6.x到1.9.2)和jQuery UI 1.12.1。更新jQuery/jQuery UI后,编辑表单不再工作!

代码:

onInitializeForm: function(formid) {
var form = $(formid).attr('id').split('-').pop();
var id = $(formid).find('#id_g').val();
var bt_gerar = $('<input />').attr('type', 'button').val('Gerar').click(function() {
$(formid).find('input[name="senha"]').val(gerarPassword());
});
if (form === 'laudos') $(formid).find('input[name="senha"]').after(bt_gerar);
if (form === 'usuarios') $(formid).find('input[name="senha"]').val('');
$(formid).find('input[name="criacao"], input[name="exclusao"], input[name="data"]').datepicker({
dateFormat: 'dd/mm/yy'
});
/* UPLOAD LAUDO */
var base_url = window.location.protocol + "//" + window.location.host + "/_dev/";
$('#arquivo').uploadify({
'swf'  : base_url + 'admin/js/uploadify-new/uploadify.swf',
'uploader'    : base_url + 'admin/js/uploadify-new/uploadify.php?laudo=true',
'cancelImage' : base_url + 'admin/img/cancel.png',
'buttonImage' : base_url + 'admin/img/upload_mini.png',
'wmode'     : 'transparent',
'width'     : '20',
'height'    : '20',
'auto'      : true,
'multi'     : false,
'fileExt'   : '*.pdf',
'fileDesc'  : 'Arquivo PDF (.PDF)',
'onComplete': function(event, ID, fileObj, response, data) {
$('#arquivo').before($('<input />').attr({type:'text',id:'arquivo_temp',class:'FormElement',name:'arquivo',value:response,role:'textbox'}));
$('#arquivo, #arquivoUploader, #arquivoQueue').remove();
$('#arquivo_temp').attr('id','arquivo').hide();
$('#arquivo').after($('<img />').attr({src:'/laudos/pdf.png',id:'arquivo_icone'}));
}
});

错误:

TypeError: $(...).closest(...).attr(...).replace is not a function

文件:jquery.jqgrid.src.js19319

代码错误行:

$id = $(this).closest("table.ui-jqgrid-btable").attr("id").replace(/_frozen([^_]*)$/, "$1")

有灯光吗?Thk yu!

请指定您使用的jqGrid的确切版本。自由jqGrid 4.13.6的jquery.jqgrid.src.js的行19319包含var insertPrefixAndSuffix = function (sOutput, opts) {(请参见此处)。"我在最新版本中使用免费的jQGrid"这句话并没有提供足够的信息。

您发布的行$id = $(this).closest("table.ui-jqgrid-btable").attr("id").replace(/_frozen([^_]*)$/, "$1")在免费jqGrid的4.13.5版本中的行号为19319。代码位于$.fn.fmatter.rowactions内部。因此,您可能在使用formatter: "actions"时遇到一些问题,但您没有将colModel包含在相应的列中。方法$.fn.fmatter.rowactions将在操作按钮的onclick中调用,该操作按钮必须位于jqGrid内部,jqGrid必须具有ui-jqgrid-btable类。

我很难猜测你为什么会出错。要么你对jqGrid类进行了一些非法修改(比如删除ui-jqgrid-btable类),要么你把网格内容(包括操作按钮)移到了jqGrid内容之外,或者其他一些奇怪的事情。无论如何,您都应该包含colModel列的定义,该列使用formatter: "actions"

顺便说一句,free jqGrid支持模板:"actions",您可以使用它来代替formatter: "actions"template: "actions"是以下设置的快捷方式

formatter: "actions", align: "center", label: "", autoResizable: false, frozen: true,
fixed: true, hidedlg: true, resizable: false, sortable: false,
search: false, editable: false, viewable: false

以及width设置,该值取决于jqGrid的一些其他选项。对于具有formatter: "actions"的列(即使是jqGrid的旧版本),也严格建议使用大多数属性。

我建议您更新以释放jqGrid 4.13.6,并将formatter: "actions"替换为template: "actions"(或者在操作列中添加editable: false和其他上述属性)。我希望它能解决你的问题。

最新更新