在我的Rails应用程序中,我使用此jQuery来防止在用户在输入字段中按下“enter”时提交表单:
$('input').on('keydown', function(e) {
if(e.which == '13') {
return false;
}
})
我在Capybara写了一个测试,以确保表单没有被提交(更多关于here),并且有一段时间让测试正常工作。最后我发现jQuery函数必须定位keydown
事件,而不是keypress
。它现在非常好用。
这让我有点不舒服,因为我知道keypress
应该也能正常工作,而且我知道它实际上可以通过在浏览器中手动尝试来实现。但是,如果我想对此行为进行有效测试,我必须使用keydown
。
这是我在集成测试中发送给Webkit的命令:
page.driver.browser.execute_script "var e = jQuery.Event('keydown'); e.which = 13; $('#shift_employee').trigger( e );"
不言而喻,当我更改jQuery函数来处理keypress
而不是keydown
时,我还更改上面的Ruby行来触发keypress
事件而不是keydown
事件1}}事件。但是除非我使用keydown
,否则测试会失败。
那是什么交易?这是一个Webkit问题吗?我是否应该担心,只要测试工作且表格没有提交?
答案 0 :(得分:0)
我相信你过分思考这个问题。表单在enter
上提交,因为您在表单中有一个提交按钮。因此,如果您不想要这种行为,则可以使用以下选项:
从表单中删除提交按钮。如果您需要其他操作的按钮,则可以创建一个看似按钮的非提交元素,并在单击时触发submit()
。