为什么必需的属性在表单上不起作用?

Why the required attribute doesn't work on form?

提问人:Eligio Cristantielli 提问时间:10/22/2023 最后编辑:QuentinEligio Cristantielli 更新时间:10/22/2023 访问量:44

问:

我正在创建此表单,但是当我单击“创建任务”按钮时,所需的属性被忽略了。

我正在使用 innerHTML 创建表单,并且:

<form id="task-form">
  <label for="task-title">Title:</label>
  <input type="text" id="task-title" name="task-title" required>
  <label for="task-date">Due date:</label>
  <input type="date" id="task-date" name="task-date" required>
  <label for="task-description">Description:</label>
  <textarea name="task-description" id="task-description" required></textarea>
  <label for="checkbox">Add to a project?</label>
  <input type="checkbox" name="checkbox" id="checkbox">
  <label for="task-priority">Priority:</label>
  <select name="task-priority" id="task-priority" required>
    <option value="Low">Low</option>
    <option value="Medium">Medium</option>
    <option value="High">High</option>
  </select>
  <button type="submit" id="create-task-btn">Create Task</button>
</form>

控制台还给我一个警告说: “表单提交已取消,因为表单未连接”

需要 JavaScript HTML 表单 输入

评论

0赞 Mr Khan 10/22/2023
如果没有完整的代码,则无法调试问题。此代码工作正常。
0赞 Alice Oualouest 10/22/2023
此消息看起来不像标准的 javascript 警告。如果您使用的是框架,则应在问题中指定它。
0赞 Mr Khan 10/22/2023
您是否正在动态创建表单?如果是这样,请提供适当的上下文。
0赞 Quentin 10/22/2023
该问题无法通过您提供的代码重现。请提供一个实际演示问题的最小可重现示例
0赞 Quentin 10/22/2023
(听起来您可能正在尝试使用 JS 单击按钮,而不是让用户这样做,并且没有将 HTML 作为文档的一部分(即让它浮动在您使用 JS 创建的从未附加的元素中)。

答:

-1赞 Hezy Ziv 10/22/2023 #1

由于您是动态添加表单,因此您需要创建侦听器

// Create the form element and set its properties
const form = document.createElement('form');
form.id = 'task-form';

// Create and append the form's content
form.innerHTML = `
    <label for="task-title">Title:</label>
    <input type="text" id="task-title" name="task-title" required>
    <label for="task-date">Due date:</label>
    <input type="date" id="task-date" name="task-date" required>
    <label for="task-description">Description:</label>
    <textarea name="task-description" id="task-description" required></textarea>
    <label for="checkbox">Add to a project?</label>
    <input type="checkbox" name="checkbox" id="checkbox">
    <label for="task-priority">Priority:</label>
    <select name="task-priority" id="task-priority" required>
        <option value="Low">Low</option>
        <option value="Medium">Medium</option>
        <option value="High">High</option>
    </select>
    <button type="submit" id="create-task-btn">Create Task</button>
`;

// Append the form to the document
const formContainer = document.getElementById('form-container');
formContainer.appendChild(form);

// Add an event listener for form submission
form.addEventListener('submit', function (event) {
    event.preventDefault(); // Prevent the default form submission behavior
    // Your form submission logic here
});
<div id="form-container"></div>

评论

0赞 Quentin 10/22/2023
JS 生成的表单照常工作。它们不需要提交事件侦听器即可运行。
0赞 Hezy Ziv 10/22/2023
我不同意,JS 生成的表单只有在使用处理表单提交的 JavaScript 框架或库(例如 angular)时才能正常工作。在发表评论之前检查代码,请!!
1赞 Quentin 10/23/2023
分歧没有意义。这是事实,而不是意见。你根本就错了。我用香草JS构建了表单,没有事件侦听器,它们工作正常。
0赞 Hezy Ziv 10/23/2023
不确定你的香草JS,但是在这种情况下你错了,这不是意见,而是事实。
0赞 Quentin 10/23/2023
证明你错了是微不足道的。从代码中删除 submit 事件处理程序。必需的属性仍将阻止表单提交。