1

我有一个使用 jQT 覆盖的简单文本输入对话框——单击一个链接,覆盖与表单一起打开,填写表单,点击提交,然后表单得到处理。我现在正在尝试向表单添加验证,但验证永远不会发生。如果我禁用链接上的覆盖并让表单在单独的窗口中打开,验证工作正常,所以我相对确定我已经正确设置了基本的验证内容。这个无覆盖的版本实际上是在http://flowplayer.org/tools/demos/validator/index.html中发生的——一个包含表单的页面被加载,验证被设置,验证代码在表单上运行提交。

我认为覆盖版本的问题在于验证设置不正确,很可能是因为找不到表单。在单击链接之前,覆盖表单不存在,因此对 validator() 的调用不能在包含链接的主页中。我尝试在创建表单代码时将包含验证器()调用的 SCRIPT 标记添加到表单代码的末尾,但这不起作用。也不会从设置覆盖表单的 jQuery 代码内部对适当的 ID 调用 validator()。在所有情况下,我都没有看到控制台中出现任何 javascript 错误。啊。

我认为这是 jQT 表单和验证的常见用法,但我无法弄清楚这里发生了什么(或这里没有发生)。有什么建议吗?谢谢!

4

1 回答 1

2

您应该能够onLoad在叠加层中点击事件:

$("#dialog").overlay({
    load: true,
    onLoad: function() {
        $("#form").validator();
    },
    onBeforeClose: function() {
        $("#form").data("validator").reset();
    }
});

编辑:添加onBeforeClose处理程序以在关闭覆盖时重置表单验证。

此外,确保z-index错误的 CSS 属性高于叠加层的 z-index。

但是,我不确定为什么您不能将调用置于validator()覆盖设置代码之外。

在单击链接之前,覆盖表单不存在,因此对 validator() 的调用不能在包含链接的主页中

这不太正确:如果您使用 FireBug 检查您的 HTML,您会看到覆盖元素只是隐藏了,并且会显示出来,并且 CSS 将被应用到 div 以使其看起来像一个模态对话框。form应该始终存在于 DOM 中。

在这里查看一个工作示例:http: //jsfiddle.net/andrewwhitaker/SY​​PSG /

于 2011-01-06T02:18:23.617 回答