在colModel中,我有一个custom_func: myFunc()
,它测试输入到jqGrid本地添加或编辑模式表单的文本字段中的整数值是否已经在少数行中使用,其中loadonce:true
设置在选项中。它的方式是custom_func:
不执行,直到模态表单提交按钮被点击,但我想有模态表单文本字段测试时,它是焦点(或模糊?)。有办法做到这一点吗?我试过这样做,如下图所示,在afterShowForm:
选项,它有点工作,但错误信息和停止是不一样的,当提交按钮被点击,有没有办法做聚焦/模糊从custom_func: myFunc()
?
下面显示了colModel代码片段,然后是自定义函数,然后是我尝试在Add模态表单的afterFormShow: function()
中使用focusout。
//colModel
...},
{name: 'ezyid', index: 'ezyid', width: 60, align: "center", editable: true,
formoptions: { rowpos: 1,
colpos: 1,
label: "Ezy ID",
elmprefix: "(*) "
},
editrules: {
custom: true,
custom_func: chkDuplicateEzyids, //custom function
required: true
}
},
colModel定制函数:
function chkDuplicateEzyids(value, colname) {
var isFound = false;
var rows = grid.jqGrid('getRowData');
for (var i = 0; i < rows.length; i++) {
var row = rows[i];
if (value == row.ezyid && value != '') { isFound = true };
}
if(isFound){
return [false, "This Ezy ID is in use, please enter another or press Cancel."];
} else {
return [true, ""];
}
}
我不太理想的尝试使用从添加模态表单选项的afterShowForm:
选项访问的自定义函数(如果必须这样做,将在编辑中类似使用):
addSettings = {
recreateForm: true,
jqModal: false,
reloadAfterSubmit: false,
closeOnEscape: true,
closeAfterAdd: true,
afterShowForm: function ($form) {
var form = $form.parent()[0];
$("#ezyid", form).blur(function () { //or focusout() if better
var resp = chkDuplicateEzyids($(this).val(), 'Ezy ID');
if (!resp[0]) {
$("#FormError", form).show();
$(".ui-state-error", form).html(resp[1]);
}
});
$("#lui_" + grid[0].id).hide();
},
onclickSubmit: onclickSubmitLocal
},
总而言之,我想使用focusout(或blur)来立即测试文本字段值,而不是必须输入表单的所有其他值才能到达Submit按钮,只发现值已经在使用中。这似乎是一种常见的做法,但我无法在这种情况下弄清楚。许多TIA。
(一些代码片段被批准重用,并感谢stackoverflow用户@Oleg)
我建议您使用dataEvents将任何事件处理程序(如focusout,这比blur
要好一点)绑定到相应的输入控件。
还有一点。'ezyid'
列似乎具有唯一的值。因此可以考虑在列中使用key: true
。在这种情况下,网格行(<table>
的<tr>
元素)的id将与列中的值一起使用。在这种情况下,chkDuplicateEzyids
函数可以减少到if ($('#' + value).length > 0) {/*duplicate are found*/}
或if ($('#' + $.jgrid.jqID(value)).length > 0) {/*duplicate are found*/}
,如果您允许在id中使用元字符。你唯一需要实现的隐藏'ezyid'
列在编辑对话框(见这里的详细信息),并显示它只在"添加"表单。