我在一个页面上有一堆表单,每个表单都包含一个html文本区域:
<textarea name="Comment" class="inputTextArea">Hello World!</textarea>
我有一个javascript事件处理程序,当用户按下Enter键时提交表单:
$(".inputTextArea").keypress(function (e) {
if (e.which === 13 && !e.shiftKey) {
$(this).closest("form").submit();
e.preventDefault();
}
});
javascript确实在Enter时提交了表单,但提交的数据不包含文本区域的当前内容。
如果我在对submit((的调用上设置了一个断点;这个";(即文本区域(,innerHTML显示初始文本区域的内容(即"Hello World!"(,而不是当前在文本区域中的文本(例如"Goodbye World!"。
在提交之前,我需要做些什么来更新文本区域控件的内容吗?
谢谢!
解决方案(或"原因"或"脸红"(
我的表单有两个提交按钮,所以我对$(this(.coneast("form"(.submit((的调用没有选择我期望的按钮("Save"按钮(。当表格发布时,我没有保存发布的数据,并认为文本区域没有更新——事实并非如此。
我的解决方案是确保按下Enter键时单击了正确的按钮。
var buttons = $(this).closest('form').find(':submit');
buttons[0].click();
令人尴尬的是,这个话题及其标题与问题或解决方案无关,但也许我笨拙的解决方案之路会帮助其他人。
在提供的代码中,它应该可以完美地工作,问题可能是形式
$(".inputTextArea").keypress(function (e) {
if (e.which === 13 && !e.shiftKey) {
$(this).closest("form").submit();
e.preventDefault();
}
});
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<form >
<textarea name="Comment" class="inputTextArea">Hello World!</textarea>
<button type="submit" class="btn btn-primary submit-btn">Submit</button>
</form>