如何防止表单中的默认值? [复制]

Posted

技术标签:

【中文标题】如何防止表单中的默认值? [复制]【英文标题】:How to preventDefault in forms? [duplicate] 【发布时间】:2021-04-10 18:48:01 【问题描述】:

我有一个带有一些输入的表单,我想对该表单进行 js 验证。但是,preventDefault 不适合我。

html 代码

<form action="" id="form">
    <h2>Send us a message</h2>
    <div class="input-box" id="nameInputBox">
        <small class="errorMsg-hidden">error msg</small>
        <input type="text" name="" required id="name">
        <span>Name</span>
    </div>
    <div class="input-box">
         <input type="submit" name="" value="Nosūtīt" id="submit">
     </div>
</form>

JS 代码

const form = document.getElementById('form');
const name = document.getElementById('name');

form.addEventListener('submit', (e) => 
    e.preventDefault();
);

在这种情况下,将 required 属性保留在 html 中很重要,因为某些样式取决于 :valid 伪类。

这里有什么解决办法吗?

【问题讨论】:

“在 html 中保留所需的属性很重要”?您没有更改属性。你甚至没有输入类型提交或按钮。 在您的表单中没有看到提交的字段? 哦,抱歉,我忘记将提交按钮代码添加到我在这里添加的表单代码中。所做的编辑。 @StackSlave 鉴于您对蒂芙尼回答的评论,您的问题实际上是关于自定义错误消息; .preventDefault() 不是真正的问题。 您是否阅读过这个问题的答案:***.com/questions/5272433/…?鉴于您明显关注自定义错误消息,这似乎可以解决您的问题? 【参考方案1】:

你可以加e.stopPropagation();

const form = document.getElementById('form');
const name = document.getElementById('name');

form.addEventListener('submit', (e) => 
    e.preventDefault();
    e.stopPropagation();
);
<form action="" id="form">
<h2>Send us a message</h2>
<div class="input-box" id="nameInputBox">
    <small class="errorMsg-hidden">error msg</small>
    <input type="text" name="" required id="name">
    <span>Name</span>
</div>
</form>
问题有点令人困惑。 可能这会起作用......“用户”是有效的用户名(仅供测试)
const form = document.getElementById('form');

var subMit = function(event) 
    let name = document.getElementById('name');
    if(name.value === "user")
        document.getElementById('ChangeName').textContent = name.value;
      document.getElementById('errorMsg-hidden').textContent = "Looks Good";
    else
        document.getElementById('errorMsg-hidden').textContent = "Validation Error";
    
    event.preventDefault();
;

form.addEventListener("submit", subMit, true);
<form action="" id="form">
<h2>Send us a message</h2>
<div class="input-box" id="nameInputBox">
    <small id="errorMsg-hidden">error msg</small><br>
    <input type="text" name="" required id="name"><br>
    <span id="ChangeName">Name</span>
    <br/>
    <input type="submit" value="Submit">
</div>
</form>

【讨论】:

感谢您的回答,但这一次对我没有帮助 它以什么方式“没有帮助”?你要求这个答案没有解决什么?如果您不解释她的尝试失败的地方以及有什么必要,蒂芙尼打算如何改进她的答案? 当我按下表单的提交按钮时,如果输入的值未验证,我想添加自定义错误消息。使用 Tiffany 提供的代码,如果输入的值未验证,表单仍会显示默认错误消息。实际上,如果我有一个字段为空,他们甚至根本不验证。它只是一直显示默认错误消息,即某个字段不能为空。 @DavidsaysreinstateMonica 您不应该(不)需要.stopPropagation() 来阻止表单提交——.preventDefault() 应该这样做。事实上,我无法重现 OP 的问题;如果我将确切的 HTML 和代码放在本地网络服务器上,它确实会阻止表单提交。 @predefined: "使用 Tiffany 提供的代码,表单仍显示默认错误消息" - 因为您的问题中没有提到这一点,因此在蒂芙尼的回答。您能否编辑您的问题以详细解释您想要实现的目标?以及您当前的代码如何/在哪里失败,人们可以尝试提供帮助。【参考方案2】:

如果您想在输入有效或无效时应用一些 css,只需将每个输入绑定到 onChange()。通过这些函数检查有效性,当一个输入有效或不正确时,只需添加一个特定的 css 类。你不再需要:valid

【讨论】:

您的陈述对我来说似乎很奇怪,因为存在内置表单验证和:valid 伪属性,因此不必将 onChange 处理程序添加到所有内容,而不是相反。监听每个 change 事件是进行表单验证的糟糕的旧方法

以上是关于如何防止表单中的默认值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何防止在表单提交中传递空白UTM值?

如何在表单输入字段中为密码分配默认值?

struts2防止表单重复提交的一种方法

如何通过默认使用已在数据库中设置的值来防止“未定义索引”? [复制]

如何在搜索表单上设置默认值?

在表单控件的默认值字段中使用 Dlookup