我遇到了一个问题,我正在做的是<form>
中有一个<textarea>
。我要实现的是用户按下Enter
键时
在textarea
上提交表单。
默认表单附带eventListener
submit
并执行回调函数。
但是问题是我想在Enter
键上执行该回调。
我知道我可以通过使用JQuery .submit(callback)
方法来实现相同的行为。
但是Vanilla javascript中有一种方法可以重新触发相同的回调函数。
const submitForm = (event) => {
event.preventDefault();
alert('form is submitted!');
};
// Form Event
document.getElementById('form').addEventListener('submit', submitForm, false);
// Key Event
document.getElementById('textarea').addEventListener('keypress', (event) => {
if (event.which === 13 || event.keyCode === 13) {
event.preventDefault();
// Form submit
}
}, false);
* {
box-sizing: border-box;
}
textarea {
width: 380px;
min-height: 210px;
padding: 18px;
font-size: 26px;
margin-bottom: 16px;
resize: vertical;
}
<form id="form" name="form">
<label>
<textarea id="textarea" name="message" placeholder="Type Here"></textarea>
</label>
</form>
答案 0 :(得分:0)
像这样尝试:
document.getElementById('textarea').addEventListener("keyup", function(event) {
if (event.keyCode === 13) {
event.preventDefault();
// do your thing here
document.getElementById('form').submit();
document.getElementById('testId').innerHTML = "it works!!!!"; // test
}
});
<!DOCTYPE html>
<html>
<body>
<form id="form" name="form" action="/your_page.aspx">
<label><textarea id="textarea" name="message" placeholder="Type Here"></textarea></label>
</form>
<p id="testId"> </p>
</body>
</html>
答案 1 :(得分:0)
form标签需要有一个action
,否则form.submit()
不会做任何事情。
<form id="form" name="form" action="/action_page.php" method="get">
<label>
<textarea id="textarea" name="message" placeholder="Type Here"></textarea></label>
<input type="submit">
</form>
此JS在按Enter键时将调用提交
let form = document.getElementById('form')
form.addEventListener('submit', submitForm);
document.getElementById('textarea').addEventListener('keypress', (event) => {
if (event.which == 13 || event.keyCode == 13) {
event.preventDefault()
form.submit()
}
});
但是真正的问题是form.submit()
不会引发onSubmit
事件!因此,当您以编程方式汇总表格时,不会调用您的eventHandler
。
来自MDN
仅当用户单击表单中的“提交”按钮(或)时,才会触发Submit事件。直接调用form.submit()方法时不会引发该事件。
https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement/submit_event
答案 2 :(得分:0)
您可以设置一个变量来确定是否允许提交表单。
var allow_submit = false;
并修改表单的Submit事件处理程序,以便在event.preventDefault()
变量不是allow_submit
的情况下调用true
:
document.getElementsByTagName("form")[0].addEventListener("submit", function(event) {
if (allow_submit !== true) {
event.preventDefault();
}
// the form is allowed to submit, do stuff
});
然后侦听keyup
事件(在文本区域上),如果按下Enter键(键码13
),则将allow_submit
设置为true
并提交表单:
document.getElementsByTagName("textarea")[0].addEventListener("keyup", function(event) {
if (event.keyCode === 13) {
allow_submit = true;
document.getElementsByTagName("form")[0].submit();
}
// enter key wasn't pressed, do other suff
});
注意::您可能必须将allow_submit
变量设为全局变量,可以通过将var
替换为window.
来实现,如下所示:< / p>
window.allow_submit = true;
注意:如果要大量使用表单和textarea元素,则应将它们存储在变量中。
祝你好运。