除了使用javascript的输入之外,如何删除每个输入的oninvalid?

Posted

技术标签:

【中文标题】除了使用javascript的输入之外,如何删除每个输入的oninvalid?【英文标题】:How to remove oninvalid for every input except one using javascript? 【发布时间】:2021-06-27 15:53:27 【问题描述】:

我创建了一个包含一些输入字段的表单,用户需要填写至少一个字段,如果用户没有选择任何字段,则会显示错误。我实现了这个目标,但我需要将我的自定义要求消息显示为无效。由于每个输入都有oninvalid,我的代码无法正常工作,但我希望显示此消息,那么如何从其余输入字段而不是填充字段中删除oninvalid

<form>
    <input name="youtube" oninvalid="this.setCustomValidity('Please fill out at least one social media field')" required/>
    <input name="vimeo" oninvalid="this.setCustomValidity('Please fill out at least one social media field')" required/>
    <input name="pinterest" oninvalid="this.setCustomValidity('Please fill out at least one social media field')" required/>
    <input type="submit" name="submit" value="Submit" id="ls-submit">
</form>

document.addEventListener('DOMContentLoaded', function () 
    const inputs = Array.from(document.querySelectorAll('input[name=youtube], input[name=vimeo], input[name=pinterest]'));
    const inputListener = e => inputs.filter(i => i !== e.target).forEach(i => i.required = !e.target.value.length, i => i.oninvalid  = !e.target.value.length);
    inputs.forEach(i => i.addEventListener('input', inputListener));
);

我真的不知道该怎么做。我们也可以使用 alert 作为错误消息,我也尝试过,但没有成功。

【问题讨论】:

【参考方案1】:

您可以从所有输入中删除 oninvalidrequired 并使用 javascript 进行检查:

var inputs = document.querySelectorAll('input');

document.querySelector('button').addEventListener('click', function() 
    var valid = false;
    for(i = 0; i < inputs.length; i++) 
        if ( inputs[i].value != "" ) 
            valid = true;
            break;
        
    
    if (valid) 
        document.querySelector("form").submit();
    
    else 
        alert('Please fill out at least one social media field');
    
);

工作示例(使用“alert”而不是“setCustomValidity”):

var inputs = document.querySelectorAll('input');

document.querySelector('button').addEventListener('click', function() 
    for(i = 0; i < inputs.length; i++) 
        var valid = false;
        if ( inputs[i].value != "" ) 
            valid = true;
            break;
        
    
    if (valid) 
        document.querySelector("form").submit();
    
    else 
        alert('Please fill out at least one social media field');
    
);
<form action="https://***.com" method="GET">
    <input name="youtube" value="">
    <input name="vimeo" value="">
    <input name="pinterest" value="">
    <button type="button">submit</button>
</form>

【讨论】:

您的代码工作正常,但是当我在提交表单的警报上单击“确定”时只有一个问题 表单提交发生在警报之后,因为我们没有阻止它。我还将input type="submit" 更改为button type="button",这样就没有值为“提交”的第四个输入。我更改了答案以修复提交... 我最终编辑了您的代码,它工作正常,谢谢!

以上是关于除了使用javascript的输入之外,如何删除每个输入的oninvalid?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JavaScript 中删除查询字符串参数?

删除 bash 脚本中除了最新的 3 个文件之外的所有文件

如何删除句子中除了第一个字母的元音之外的所有元音?

删除 CSV(Excel) 中的所有行,除了第 n 行

除了某些指定的内容之外,如何删除PHP中包含内容的所有标记?

sklearn 除了文本之外的其他输入用于文本分类