我有一个表单,我想使用一个对话框来确认提交.对我来说,将对话框嵌套在表单中会很方便,这样在使用Java脚本查询对话框时,就可以更容易地确定哪个对话框属于哪个表单.以下是这方面的两个最小示例.在第一个示例中,该对话框位于表单外部,并按预期工作.在第二种情况下,对话框嵌套在表单中,由于某种原因,只有是按钮起作用,而否按钮什么也不做.

const form = document.getElementById("myForm");
const dialog = document.getElementById("confirmDialog");
const confirmBtn = document.getElementById("confirmBtn");
const cancelBtn = document.getElementById("cancelBtn");

form.addEventListener("submit", function(event) {
  event.preventDefault();
  dialog.showModal();
});

confirmBtn.addEventListener("click", function() {
  dialog.close();
  form.submit(); // Continue form submission
});

cancelBtn.addEventListener("click", function() {
  dialog.close(); // Cancel form submission
});
<form id="myForm">
  <input type="submit" value="Submit" />
</form>
<dialog id="confirmDialog">
  <p>Are you sure you want to submit this form?</p>
  <menu>
    <button id="confirmBtn">Yes</button>
    <button id="cancelBtn">No</button>
  </menu>
</dialog>

const form = document.getElementById("myForm");
const dialog = document.getElementById("confirmDialog");
const confirmBtn = document.getElementById("confirmBtn");
const cancelBtn = document.getElementById("cancelBtn");

form.addEventListener("submit", function(event) {
  event.preventDefault();
  dialog.showModal();
});

confirmBtn.addEventListener("click", function() {
  dialog.close();
  form.submit(); // Continue form submission
});

cancelBtn.addEventListener("click", function() {
  dialog.close(); // Cancel form submission
});
<form id="myForm">
  <input type="submit" value="Submit" />
  <dialog id="confirmDialog">
    <p>Are you sure you want to submit this form?</p>
    <menu>
      <button id="confirmBtn">Yes</button>
      <button id="cancelBtn">No</button>
    </menu>
  </dialog>
</form>

推荐答案

默认情况下,<form>内的任何按钮都将是提交按钮.

submit:该按钮将表单数据提交给服务器.这是默认的if the attribute is not specified for buttons associated with a 101,或者如果属性为空或无效值.

因此,您可以通过在侦听器中使用the preventDefault() method来避免默认操作,即提交表单.

我会建议更换其中的the type个按钮,以解决更接近根本原因的问题,并避免不可预见的后果.例如,辅助技术可能会认为它们是提交按钮.

button:该按钮没有默认行为,默认情况下按下时不执行任何操作.它可以让客户端脚本监听元素的事件,这些事件在事件发生时触发.

const form = document.getElementById("myForm");
const dialog = document.getElementById("confirmDialog");
const confirmBtn = document.getElementById("confirmBtn");
const cancelBtn = document.getElementById("cancelBtn");

form.addEventListener("submit", function(event) {
  event.preventDefault();
  dialog.showModal();
});

confirmBtn.addEventListener("click", function() {
  dialog.close();
  form.submit(); // Continue form submission
});

cancelBtn.addEventListener("click", function() {
  dialog.close(); // Cancel form submission
});
<form id="myForm">
  <input type="submit" value="Submit" />
  <dialog id="confirmDialog">
    <p>Are you sure you want to submit this form?</p>
    <menu>
      <button type="button" id="confirmBtn">Yes</button>
      <button type="button" id="cancelBtn">No</button>
    </menu>
  </dialog>
</form>

Javascript相关问答推荐

可以将SuperTest导入为ES 6模块吗?

为什么它无法识别日期 Select 器上的任何 Select ?

我应该如何在此Angular 16应用程序中的方法中使用@ Hostspel?

订阅操作顺序

如何在ReactJS中修复这种不需要的按钮行为?

无法在page. evalve()内部使用外部函数

事件错误:类型错误:无法读取未定义的属性(读取stopPropagation)

将状态向下传递给映射的子元素

D3 Scale在v6中工作,但在v7中不工作

如何从URL获取令牌?

如何从html元素创建树 struct ?

这个值总是返回未定义的-Reaction

在WordPress中使用带有WPCode的Java代码片段时出现意外令牌错误

如何发送从REST Api收到的PNG数据响应

Jest toHaveBeenNthCalledWith返回当前设置的变量值,而不是调用时的值

以编程方式聚焦的链接将被聚焦,但样式不适用

将相关数据组合到两个不同的数组中

顶点图使用组标签更新列之间的条宽

不协调嵌入图片

如何在下一个js中更改每个标记APEXCHARTS图表的 colored颜色