如何在jqGrid custom_func中以模态形式对文本字段使用focusout?

时间:2011-08-05 06:21:24

标签: jquery jqgrid jquery-validate modal-dialog jquery-focusout

在colModel中,我有一个custom_func: myFunc(),它测试在jqGrid原生的Add或Edit模式表单的文本字段中输入的整数值是否已经在网格中可见的少数几行中使用{{1} 1}}在选项中设置。它是loadonce:true的方式,直到点击模态表单提交按钮才执行,但我想在焦点输出(或模糊?)时测试模态表单文本字段。有没有办法做到这一点?我试图在custom_func:选项中显示如下,它有点工作,但错误信息和暂停与点击提交按钮时不一样,是否有办法进行聚焦/模糊来自afterShowForm:

以下显示colModel片段,后跟自定义函数,然后尝试在添加模式窗体的custom_func: myFunc()中使用焦点。

afterFormShow: function()

colModel自定义函数:

//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
            }
        },             

我不太理想的尝试使用从添加模式表单选项的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:

总结一下,我想使用focusout(或blur)来立即测试文本字段值,而不必输入表单的所有其他值来获取Submit按钮,只是为了找到值已经在使用。这似乎是一种常见的做法,但我无法在这种背景下弄清楚。许多TIA。

(一些代码片段经批准后重复使用,并赞赏stackoverflow用户@Oleg)

1 个答案:

答案 0 :(得分:1)

我建议你使用dataEvents将任何事件处理程序(比如blur更好,'ezyid')绑定到相应的输入控件。有关示例,请参阅focusout

还有一句话。 key: true列似乎有唯一值。因此,您可以考虑在列中使用<tr>。如果网格行的ID(对于<table>的{​​{1}}元素)将与列中的值一起使用。如果您允许在ID中使用the old answer,则chkDuplicateEzyids功能可以缩小为if ($('#' + value).length > 0) {/*duplicate are found*/}if ($('#' + $.jgrid.jqID(value)).length > 0) {/*duplicate are found*/}。您需要在“编辑”对话框中实现隐藏'ezyid'列的唯一方法(有关详细信息,请参阅meta-characters),并仅在“添加”表单中显示。