Jquery 如何在jqGrid custom_func中的模态形式的文本字段上使用focusout?

Jquery 如何在jqGrid custom_func中的模态形式的文本字段上使用focusout?,jquery,jqgrid,jquery-validate,modal-dialog,jquery-focusout,Jquery,Jqgrid,Jquery Validate,Modal Dialog,Jquery Focusout,在colModel中,我有一个自定义函数:myFunc(),它测试输入jqGrid本机添加或编辑模式表单文本字段的整数值是否已经在网格中可见的少数行中使用,其中选项中设置了loadonce:true。在点击模式表单提交按钮之前,custom\u func:不会执行,但我希望在调焦(或模糊?)时测试模式表单文本字段。有办法做到这一点吗?我试着在afterShowForm:选项中如下所示执行此操作,但错误消息和停止与单击Submit按钮时不同,是否有方法从自定义函数:myFunc()执行聚焦/模糊

在colModel中,我有一个
自定义函数:myFunc()
,它测试输入jqGrid本机添加或编辑模式表单文本字段的整数值是否已经在网格中可见的少数行中使用,其中选项中设置了
loadonce:true
。在点击模式表单提交按钮之前,
custom\u func:
不会执行,但我希望在调焦(或模糊?)时测试模式表单文本字段。有办法做到这一点吗?我试着在
afterShowForm:
选项中如下所示执行此操作,但错误消息和停止与单击Submit按钮时不同,是否有方法从
自定义函数:myFunc()
执行聚焦/模糊

下面显示了colModel代码段,后面是自定义函数,后面是我尝试在Add model表单的
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, ""];

}

}
总而言之,我想使用focusout(或blur)立即测试文本字段值,而不是必须输入表单的所有其他值才能进入Submit按钮,结果发现该值已经在使用中。这似乎是一种常见的做法,但在这种情况下我无法理解。许多TIA


(一些代码片段被批准重用,并感谢stackoverflow user@Oleg)

我建议您使用它将任何事件处理程序(例如,模糊)绑定到相应的输入控件。有关示例,请参见


还有一句话。
'ezyid'
列似乎具有唯一的值。因此,您可以考虑在列中使用<代码>键:Trime< /Cord>。在这种情况下,网格行的ID(用于
元素)将与列中的值一起使用。在这种情况下,可以将
chkduplicatezyids
函数缩减为
if($('.''.'+value).length>0){/*发现重复项*/}
或缩减为
if($('.'.'+$.jgrid.jqID(value)).length>0){/*发现重复项*/}
如果您允许在id中使用。您只需要在编辑对话框中隐藏
'ezyid'
列(有关详细信息,请参阅),并仅在“添加”表单中显示它。

非常感谢@Oleg,现在正是我想要的方式。这些客户端概念中的一些涉及到一些陡峭的学习曲线,我喜欢你在答案中留下足够的灰色区域来进行挖掘,当它被发现时,理解会更好。我已经开发了一段时间的经典ASP和.NET服务器端应用程序,但仍然需要停止并重新校准这种客户端UI脚本的思想。明天我会发布解决我问题的代码。再次感谢。@Jerry Of Perth:我很高兴能帮助你。不客气!三年前,在使用了C/C++和C#等更“经典”的语言之后,我开始使用JavaScript时遇到了同样的问题。所以我很理解你的问题。
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
},