【问题标题】:How to prevent HTML form from submit if I click another button inside the form? [closed]如果我单击表单内的另一个按钮,如何防止 HTML 表单提交? [关闭]
【发布时间】:2021-07-18 20:23:06
【问题描述】:

这是 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 内插入粗体标签的按钮,但是当我单击粗体按钮时,它会提交表单。我知道它可能会这样做,因为我在表单上有提交事件侦听器,但是每个事件侦听不同的触发器并且按钮类型也不同。

有没有办法让这个工作,同时保持表单元素上的事件监听器?

如果不是,这个问题的正确解决方案是什么?

【问题讨论】:

  • button type='button' 不应提交表单。你有错误吗?测试,&lt;form action="#" onsubmit='return false' ...
  • 代码有效,我只是忘了刷新页面。我只是使用我的一些按钮返回然后编辑,即使我离开页面然后返回,更改也没有加载。这似乎是最合理的解释,因为我没有更改代码中的某些内容并且它可以工作。

标签: javascript html button addeventlistener form-submit


【解决方案1】:

你在正确的轨道上。我已将您的代码添加到 sn-p 中,并且不会提交单击粗体按钮。因此,您向我们展示的内容是正确的。其他原因导致您的问题,其他一些代码执行您未共享的提交。请打开开发工具,单击网络选项卡,然后单击我的 sn-p 中的粗体按钮。您是否看到代表提交的新行?如果不是,那么您显示的代码是正确的,并且是其他原因导致了问题。您需要调试已有的 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>

【讨论】:

  • 你是对的!代码很好,我认为问题是我忘记刷新页面了。我只点击了一些返回然后编辑按钮。最明显的问题是 JavaScript/HTML 更改并未全部加载。
【解决方案2】:

我解决了你的问题,你的 javascript 函数有很多错误,你需要定义你的函数 insertCursor。

检查此代码笔:

var myForm = document.getElementById('myform');
var myText = document.getElementById('myText');
var boldBtn = document.getElementById('boldBtn');

myForm.addEventListener('submit', function(event) {
     event.preventDefault();
    const formData = new FormData(myForm);
     //..............
     //code to send data to PHP
});

function insertAtCursor(Item,value){
  Item.value=value;
}
boldBtn.addEventListener('click', function(event) {
    event.preventDefault(); 
    insertAtCursor(myText,"BOLD text here");
});
<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>

谢谢

【讨论】:

  • :)) 我已经定义了函数,我只是没有在这里写它,因为那不是我的问题。不过还是谢谢!
  • 代码很好。因为我使用页面上的一些按钮在页面之间导航,所以我认为并非所有 HTML/Javascript 更改都已加载,并且我没有检查页面源以查看问题。在我进行页面刷新后一切正常,没有任何代码更改。
猜你喜欢
  • 2014-08-15
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 2020-04-13
相关资源
最近更新 更多