javascript - 如果我单击表单内的另一个按钮,如何防止 HTML 表单提交?
问题描述
这是HTML代码:
<form action="#" method="POST" id = "myForm">
<div>
<div><p><label for = "myText"><b>Article Text </b></label>
<button type = "button" id="boldBtn">Bold</button></p></div>
<textarea name ="myText" id = "myText" rows="20" cols="55"></textarea>
</div>
<div>
<input type="submit" class="btn btn-outline-secondary btn-lg" value = "Submit">
</div>
</form>
这是javascript代码:
const myForm = document.getElementById('myForm');
const myText = document.getElementById('myText');
const boldBtn = document.getElementById('boldBtn');
myForm.addEventListener('submit', function(event) {
event.preventDefault();
const formData = new FormData(myForm);
//..............
//code to send data to PHP
});
boldBtn.addEventListener('click', function(event) {
event.preventDefault();
//insertAtCursor(myText,"BOLD text here");
});
我想添加一个在 textArea 内插入粗体标签的按钮,但是当我单击粗体按钮时,它会提交表单。我知道它可能会这样做,因为我在表单上有提交事件侦听器,但是每个事件都侦听不同的触发器,并且按钮类型也不同。
有没有办法使这项工作,并将事件侦听器保持在表单元素上?
如果不是,这个问题的正确解决方案是什么?
解决方案
你在正确的轨道上。我已将您的代码添加到代码段中,并且不会提交单击粗体按钮。因此,您向我们展示的内容是正确的。其他原因导致您的问题,其他一些代码执行您未共享的提交。请打开开发工具,单击网络选项卡,然后单击我的代码片段中的粗体按钮。您是否看到代表提交的新行?如果不是,那么您显示的代码是正确的,并且是其他原因导致了问题。您将需要调试已有的 Javascript。
<form action="#" method="POST" id = "myForm">
<div>
<div><p><label for = "myText"><b>Article Text </b></label>
<button type = "button" id="boldBtn">Bold</button></p></div>
<textarea name ="myText" id = "myText" rows="20" cols="55"></textarea>
</div>
<div>
<input type="submit" class="btn btn-outline-secondary btn-lg" value = "Submit">
</div>
</form>
推荐阅读
- android - 相机:API 24 以下的设备不返回任何 OnActivityResult
- sharepoint - 在 SharePoint 中查询 4000 行列表非常慢
- java - 如何对私有类进行单元测试
- azure - 如何通过 powershell 脚本在 Azure VM 中创建和附加 Unmanged 磁盘?
- java - 复制对新数组列表的引用并在 Java 中删除
- swift - swift:TableViewCell 在滚动之前不会更新约束
- javascript - 如何防止对象在将两者相加时转换为字符串?
- arrays - 聊天机器人用户从字符串中获取参数的最佳方法
- java - PDFBox 带渐变的虚线图案
- python - 如何结合 tf.map_fn 和 tf.split