【发布时间】:2015-03-25 23:43:00
【问题描述】:
我找到了十多篇关于如何执行此操作的不同 SO 文章,但没有一篇有效。
我正在尝试编写一些测试,并且我想测试当我在 input 中按 enter 时,表单确实会回发。但是,我无法让它模拟这个。
无论我选择哪种方法,keypress 事件都会被触发——事件侦听器会看到它——但不会提交表单。
HTML
<!-- returns an error on submit, but that's fine...
we're only seeing if we can get a submit to happen -->
<form action="POST">
<input id="myinput" type='text' value="foo" />
</form>
<div id="output"></div>
Javascript
$(function () {
var $input = $("#myinput");
$input.on("keypress", function (evt) {
$("#output").append("Typed: " + evt.keyCode + ", but the form didn't submit.<br>");
});
$("form").on("submit", function () { alert("The form submitted!"); } );
// try jQuery event
var e = $.Event("keypress", {
keyCode: 13
});
$input.trigger(e);
// try vanilla javascript
var input = $input[0];
e = new Event("keypress");
e.keyCode = 13;
e.target = input;
input.dispatchEvent(e);
e = document.createEvent("HTMLEvents");
e.initEvent("keypress", true, true);
e.keyCode = 13;
e.target = input;
input.dispatchEvent(e);
});
是否可以像这样模拟实际的按键操作?
如果您专注于文本框(在 jsFiddle 中)并实际按下 enter,页面将返回并返回如下内容:
这就是我想要实现的,仅在代码中。
原因如下:
$("input").on("keypress", function (e) {
if (e.keyCode == 13) {
e.preventDefault();
}
});
我在我的代码库中遇到了这个问题,我想测试一下这种事情不会再次发生。
【问题讨论】:
-
当我在 osx 上使用 chrome、ff 和 safari 调用您的链接时,我得到了 3 次“Typed: 13”...所以看起来它可以工作了吗?
-
关注文本框并实际按下
... 这就是我正在寻找的行为 -
按键正在工作,但我“认为”他是说当您手动“按下”输入按钮时发生的表单提交没有被发送..我认为这是一个安全问题。也许阻止您自动发布表格?我去看看。
-
@KevinCJones 如果这是他想要做的事情,那么使用
form.submit()是一种方式。 -
我不认为你可以做到,但如果这是为了用户模拟,例如测试,正如你所说,我认为你可以做任何你的例子,但只需捕获键码 13 被点击并调用提交函数......如果这纯粹是学术练习,我什至研究了这个@ 987654322@但没有找到任何快乐..
标签: javascript