关于更改事件的Jquery .hide()或.show()会禁止表单提交

时间:2016-02-27 01:51:02

标签: javascript jquery html forms

我遇到了一个令人难以置信的模糊不清的bug,想要为后人记录它。这是发生的事情:

我正在向用户显示一个HTML表单,其中包含许多文本字段和底部的提交按钮。在提交按钮上方是一条警告消息,根据用户是否填写了所有必需信息,该消息会显示或消失。在测试期间(使用Capybara自动化,或在浏览器中手动)我在页面中填写每个字段,然后单击“提交”按钮,但第一次单击不会注册。 second 点击按预期提交表单。

我发现如果我禁用自定义Javascript,则不需要再次点击。经过一些消除过程后,我确定一条Jquery线负责失败:$(‘#warning-message’).hide();。注释掉这一行,填写并提交表单按预期工作。重新启用此行,表单提交需要额外点击。什么是frak?

1 个答案:

答案 0 :(得分:0)

我最终发现这是因为,在手动测试期间和Capybara-webkit模拟时,当您单击像提交按钮这样的元素时,它会在屏幕上注册为特定的X / Y坐标。您没有点击DOM元素,而是点击了一个坐标。由于我设置此页面的(懒惰)方式,当我填写所有必需元素然后单击提交,单击提交按钮触发Jquery change事件导致{ {1}},这会导致提交按钮跳过我点击区域之外的,因此提交事件永远不会首先被触发,因为浏览器没有'我意识到我点击了一个按钮。

我仍然不清楚该怎么做,但它绝对不是一个bug本身,而是对我如何处理浏览器事件的误解(就我而言)。我通过将警告div包装在一个固定高度的容器中解决了这个问题,因此不相关的Jquery更改事件不会导致提交按钮跳转。

无论如何,我希望这有助于某人。