文本域按下回车键触发表单提交而非换行的问题咨询
解决textarea回车触发表单提交的问题
我来帮你搞定这个问题!你的核心需求是在textarea里按回车时正常换行,而不是触发表单提交对吧?先看你现在的代码,里面的disableF5函数逻辑完全搞反了——它反而在检测到回车(keyCode 13)时主动触发了按钮点击,这就是为什么回车会提交表单的根源。
修正方案
我们需要给目标textarea绑定键盘事件,阻止回车的默认表单提交行为,同时保留textarea的换行功能。这里提供两种实现方式,你可以根据需求选择:
方式一:精准控制光标位置的完整实现
这种方式会手动插入换行符并调整光标位置,适配所有浏览器:
<textarea rows="4" asp-for="@Model.BusinessDescription"></textarea> <script> $(function () { // 绑定目标textarea的keydown事件 $("textarea[asp-for='@Model.BusinessDescription']").on("keydown", function(e) { // 检测是否按下回车键 if (e.keyCode === 13) { // 阻止浏览器默认的表单提交行为 e.preventDefault(); // 获取当前光标位置,插入换行符 const start = this.selectionStart; const end = this.selectionEnd; const currentValue = $(this).val(); // 拼接新的内容:光标前内容 + 换行 + 光标后内容 $(this).val(currentValue.substring(0, start) + "\n" + currentValue.substring(end)); // 将光标移动到换行后的位置,保证输入流畅 this.selectionStart = this.selectionEnd = start + 1; } }); // 如果你原本确实需要禁用F5刷新(函数名disableF5的意图),可以保留这段 $(document).on("keydown", function(e) { if (e.keyCode === 116) { // F5的keyCode是116 e.preventDefault(); } }); }); </script>
方式二:简化版(大部分浏览器适用)
如果你的目标浏览器在textarea中按回车默认会自动换行,只需要阻止事件冒泡避免触发表单提交即可:
<textarea rows="4" asp-for="@Model.BusinessDescription"></textarea> <script> $(function () { $("textarea[asp-for='@Model.BusinessDescription']").on("keydown", function(e) { if (e.keyCode === 13) { // 阻止事件冒泡到表单,避免触发提交 e.stopPropagation(); // 若部分浏览器不自动换行,再添加手动插入换行的代码即可 } }); }); </script>
额外建议
为了更精准地选择目标textarea,建议给它加个id属性,比如:
<textarea id="businessDesc" rows="4" asp-for="@Model.BusinessDescription"></textarea>
然后脚本里用$("#businessDesc")来选择,这样就不会影响页面上其他的textarea控件啦。
内容的提问来源于stack exchange,提问作者maxspan
相关产品推荐
相关产品推荐

