【问题标题】:Disable jQuery Validate plugin禁用 jQuery 验证插件
【发布时间】:2013-04-05 04:08:51
【问题描述】:

我正在使用 Web 驱动程序完成一个表单,需要使用 browser.execute_script() 绕过两个表单域,将隐藏的表单域插入 DOM。

但是,我还需要禁用现有的验证方法才能提交表单。该表单使用 jQuery Validate。谁能建议如何禁用部分或全部 jQuery Validate?

我尝试使用以下内容,但收到错误 TypeError: d is undefined

b.execute_script('
    $("firstMemorableCharacter").rules("remove");
    $("secondMemorableCharacter").rules("remove");
')

其中firstMemorableCharacter 是附加了验证规则的表单字段的名称。

使用 jQuery Validate 设置验证如下:

with($.validator) {
    addMethod(...);

setDefaults({
    ....
    messages: { },
    rules: {
            firstMemorableCharacter: {
                radioHasValue: true
            },
            secondMemorableCharacter: {
                radioHasValue: true
            }
    }
});

(上面显示的规则是我需要禁用的规则。)

提前致谢。

更新:

在这篇文章How do I remove jQuery validation from a form? 之后,我尝试使用$("#form-id")[0].submit(); 使用HTML DOM(绕过jQuery)提交表单。但是,这不起作用 - 似乎 jQuery 中有一些额外的 JavaScript 需要执行才能正确提交表单。

因此,我需要一种在 jQuery Validate 中专门禁用这两个规则的方法,而不是禁用整个 jQuery 或 jQuery Validate。

【问题讨论】:

  • 正常完成表单(即像普通用户一样)而不是破解页面不是更容易吗?
  • @JustinKo 问题是无法正常填写其中一个字段,因为它是自定义的保管箱元素。如果我更改元素(在本例中为输入单选元素),我会收到错误消息,即我试图访问不可见的 HTML 元素。所以我认为只插入一个隐藏的表单字段会更容易。
  • 元素的 HTML 是这样的:
    .....
  • @Imme22009 不要将该 html 放在评论中,而是编辑您的问题并将信息放在可以正确格式化的地方
  • 您是否可能需要模拟一些事件或动作(如鼠标悬停、焦点、悬停或 onchange)以使控件可见?如果用户可以操纵它,就必须有办法让它变得可见。告诉我们更多关于这个自定义保管箱的事情,其中​​大多数并不难弄清楚,如果你碰巧知道控制的特殊风格(jquery 或其他),通常有一个演示页面可以用来开发简单的有关如何使用控件的示例代码。能否请您提供您正在使用的 watir-webdriver 版本?

标签: jquery ruby jquery-validate watir-webdriver


【解决方案1】:

谁能建议如何禁用部分或全部 JQuery Validator?

一旦初始化,您就不能禁用它的任何部分。但是,您可以使用 the .rules() method 动态操作规则,正如您已经猜到的那样。

只要确保.rules() 方法在某个时间 .validate() 之后被调用,否则它会失败。

查看这个简单的演示:http://jsfiddle.net/qdjMS/


您的以下代码中存在语法错误。

$("firstMemorableCharacter").rules("remove");
$("secondMemorableCharacter").rules("remove");

请注意,您的两个 jQuery 选择器毫无意义。

如果您尝试定位 id,那么您需要在前面加上 #...

$("#firstMemorableCharacter").rules("remove");
$("#secondMemorableCharacter").rules("remove");

从您的 cmets 中,我还注意到您的元素包含 id="firstMemorableCharacter1",因此您还需要将 id 拼写完全相同...

$("#firstMemorableCharacter1").rules("remove");

否则,您可以通过name 定位它们,如in my demo 所示...

$("[name='firstMemorableCharacter']").rules("remove");
$("[name='secondMemorableCharacter']").rules("remove");

【讨论】:

  • 我不是这样的蛮力解决方法的超级粉丝,我宁愿更有机地填写表格。 IOW 我认为这是他们提出的错误问题。但话虽如此,对于解决 OP 所要求的解决方案的出色答案表示敬意。
  • @ChuckvanderLinden,我同意,我不确定 OP 最终试图通过这一切实现什么。
  • 完美 - 非常感谢您的回答。我最终遵循了规则(“删除”)和名称定位 - 效果很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
相关资源
最近更新 更多