首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在用户将文本添加到输入字段后仍然显示内联错误消息。

在用户将文本添加到输入字段后仍然显示内联错误消息。
EN

Stack Overflow用户
提问于 2022-05-11 11:48:44
回答 1查看 135关注 0票数 0

当用户单击submit时,我编写了一条错误消息,显示在每个使用DOM选择器丢失值的输入字段下。我还禁用了当点击提交时打开的电子邮件文件,使用preventDefault()

但是,当用户键入文本区域时,消息不会消失。我试着用一个“按键”事件,但我无法让它工作。

HTML代码:

代码语言:javascript
运行
AI代码解释
复制
<body>
    <header class="header">

        <form action="mailto:me@fakeemail.com">
            <fieldset>

                <legend>Personal details</legend>
                <p>
                    <label>
                        Full name:
                        <input type="text" name="fullname" id="fullname">
                    </label>
                </p>
                <p class="errormsg" id="nameerrormsg">Please enter your name above</p>

                <p>
                    <label>
                        Street Address:
                        <input type="text" name="streetaddr" id="streetaddr">
                    </label>
                </p>
                <p class="errormsg" id="addrerrormsg">Please enter your street address</p>

            </fieldset>
            <input type="submit" value="Submit it!" class="submitIt" onsubmit="return checkForm();">
        </form>
        <br>

        <script src="inline-error.js" charset="utf-8"></script>

        <div class="returnHome">
            <a href="javascript:history.back()">Return Home</a>
        </div>
    </header>
</body>

Javascript代码:

代码语言:javascript
运行
AI代码解释
复制
var submitIt = document.querySelector(".submitIt");
submitIt.addEventListener("click", function checkForm(event) {
    var fNameInput = document.querySelector("#fullname")
    var streetAddInput = document.querySelector("#streetaddr")
    if (fNameInput.value == "") {
        var nameErrorMsg = document.querySelector("#nameerrormsg").style.display = "block";
        event.preventDefault();
    }
    if (streetAddInput.value == "") {
        var addrErrorMsg = document.querySelector("#addrerrormsg").style.display = "block";
        event.preventDefault();
    }
})
EN

回答 1

Stack Overflow用户

发布于 2022-05-11 14:22:27

若要查看处于当前状态的代码中的即时结果,请在检查输入值之前隐藏错误消息。

代码语言:javascript
运行
AI代码解释
复制
var submitIt = document.querySelector('.submitIt');
submitIt.addEventListener('click', function checkForm(event) {
    var nameErrorMsg = document.querySelector('#nameerrormsg');
    var addrErrorMsg = document.querySelector('#addrerrormsg');

    nameErrorMsg.style.display = 'none';
    addrErrorMsg.style.display = 'none';

    var fNameInput = document.querySelector('#fullname');
    var streetAddrInput = document.querySelector('#streetaddr');

    if (fNameInput.value == '') {
        nameErrorMsg.style.display = 'block';
        event.preventDefault();
    }
    if (streetAddrInput.value == '') {
        addrErrorMsg.style.display = 'block';
        event.preventDefault();
    }       
});

话虽如此,以下是一些补充建议:

CSS用于元素的样式化(不是JavaScript)

  • Discourage内联JavaScript

  • Store DOM元素,而不是事件侦听器范围之外的内联DOM元素,因此您不必每次单击
  • 时都查询DOM,考虑使用input上的required属性来快速赢得

的样式)。

所以..。

代码语言:javascript
运行
AI代码解释
复制
<!-- form.html -->
<head>
    <link rel="stylesheet" href="form.css">
</head>
<body>
    <header class="header">
        <form>
            <fieldset>
                <legend>Personal details</legend>
                <p>
                    <label for="fullname">Full name:
                        <input type="text" name="fullname" id="fullname" required>
                    </label>
                </p>
                <p class="errormsg" id="nameerrormsg">Please enter your name above</p>
                <p>
                    <label for="streetaddr">Street Address:
                        <input type="text" name="streetaddr" id="streetaddr" required>
                    </label>
                </p>
                <p class="errormsg" id="addrerrormsg">Please enter your street address</p>
            </fieldset>
            <input type="submit" value="Submit it!" class="submitIt">
        </form>
    </header>
    <button id="returnhome">Return Home</button>
    <script src="inline-error.js"></script>
</body>
代码语言:javascript
运行
AI代码解释
复制
/* form.css */
input:valid {
    border: none;
}
input:invalid:required {
    border: 1px solid red;
}

.errormsg {
    display: none;
}

.show {
    display: block;
}
代码语言:javascript
运行
AI代码解释
复制
// inline-error.js
var submitIt = document.querySelector('.submitIt');
var nameInput = document.querySelector('#fullname');
var nameError = document.querySelector('#nameerrormsg');
var addrInput = document.querySelector('#streetaddr');
var addrError = document.querySelector('#addrerrormsg');
var returnHome = document.querySelector('#returnhome');

returnHome.addEventListener('click', e => {
    e.preventDefault();
    history.back();
});

submitIt.addEventListener('click', event => {
    const nameValue = nameInput.value;
    const addrValue = addrInput.value;

    if (!nameValue || !addrValue) {
        event.preventDefault();
    }

    if (!nameValue) {
        nameError.classList.add('show');
    } else {
        nameError.classList.remove('show');
    }

    if (!addrValue) {
        addrError.classList.add('show');
    } else {
        addrError.classList.remove('show');
    }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72206862

复制
相关文章
laravel--laravel的重定向类Redirector
laravel的重定向类Redirector 在laravel5中,重定向类可以直接通过redirect()方法直接获取,不需要声明,有几个常用的方法: redirect() -> to( “重定向到指定的地址或者路由器当中”):可以简写为reidrect() redirect() -> action( “重定向到控制器的指定action当中”) redirect() -> route(“重定向到路由的别名当中”) redirect() -> back(“返回上一层请求的地址”) redirect() ->
双面人
2020/02/24
1.3K0
laravel--laravel的重定向类Redirector
Laravel DB类实现事务
事务主要用于处理操作量大,较复杂的数据,如在某个场景你想删除某个用户,但又要删除这个用户相关的信息,这种操作就构造一个事务。
切图仔
2022/09/08
9350
JS解绑事件
传统方式 el.onclick=function(){ alert(0) el.onclick=null;//解绑事件 } addEventListener function fn(){ alert(0) el.removeEventListener('click',fn);//点击后移除事件 } el.addEventListener('click',fn)//监听事件
切图仔
2022/09/08
1.6K0
CPU绑核的意义
进程或者线程绑定到某个CPU Core,仍然可能会有线程或者进程切换的发生,如果想到达到进一步减少其他进程对于该进程或者线程影响,可以采取把CPU Core从Linux内核调度中剥离出来。Linux内核提供isolcpus,对于有4个CPU core的系统,在启动时候加入isolcpus=2,3,那么系统启动后将不会使用CPU3,CPU4.这里的不适用不是绝对的,但是可以通过taskset命令来设置
用户4700054
2022/08/17
3.1K0
CPU绑核的意义
PHP Laravel 上传图片、文件等类封装
今天把项目中上传功能封装成类,方便后面使用,简单的封装了一下,感觉还不怎么好,后面继续优化。 具体代码如下:
用户2323866
2021/06/30
2K0
PHP Laravel 上传图片、文件等类封装
今天把项目中上传功能封装成类,方便后面使用,简单的封装了一下,感觉还不怎么好,后面继续优化。
用户8449980
2021/07/13
2.3K0
[译]Laravel 5.0 之 表单验证类 (Form Requests)
本文译自 Matt Stauffer 的系列文章. ---- 让人头痛的表单验证 只要你曾经在使用 Laravel 框架的过程中试图找到有关用户输入验证的最佳实践, 你就应该了解这是一个争论最多并且几
小李刀刀
2018/03/02
4K0
如何解决 IDEA 占用大量 CPU 导致的卡顿问题?这顿操作猛如虎!
来源:blog.csdn.net/xiaoyong5854/article/details/106941975/ 背景:昨晚有一次敲完代码运行完程序后,idea非常卡顿,连输入代码都不能进行,因为有点晚并且累了,所有就关了电脑,今天早上再次打开idea,还是一样卡顿,因为idea的试用期明天就到期了,所有就先破解了idea,破解完之后,还是非常流畅的,但是一运行程序就拉胯了,就先百度看一下解决方案,以下几个解决方案试了,基本问题还是没有解决,就在群里问了几个大佬,方案不是重装系统就是换电脑,同时开始了电脑
程序猿DD
2022/04/08
2K0
如何解决 IDEA 占用大量 CPU 导致的卡顿问题?这顿操作猛如虎!
Kubernetes 陈年老 bug - 绑核
最近遇到一个线上问题,使用了 lxcfs 的容器,跑在 cgroup v2 的机器上时,在容器内使用 top 或者 htop 看到的核数和 cpu 使用率有问题。虽然根本问题在 lxcfs 的实现,但问题最终的触发与 cpuset 和 cpu.max 的设置有关。这里并不会去介绍这个问题本身,而是由问题引发的思考,我们真的了解 k8s 里面的绑核行为吗,你以为你以为的就是你以为的吗?
李鹤
2023/09/16
5310
Laravel 5.5 的自定义验证对象/类
Laravel 5.5 将提供一个全新的自定义验证规则的对象,以作为原来的 Validator::extend 方法的替代。 Laravel 中的表单验证是比较方便的,而且内置了大量的可用验证规则,但不管官方提供了多少,总还是会有满足不了需求的时候。很多时候我们会直接用正则表达式来处理这种特殊的验证,也有时候我们会选择用 Validator::extend 来扩展一个自定义的规则。但在 Laravel 5.5 版本中,我们有了新的手段,只要定义一个实现 Illuminate\Contracts\Valida
小李刀刀
2018/03/02
3.1K0
如何使用 Laravel Collections 类编写神级代码
Laravel 提供了一些超赞的组件,在我看来,它是目前所有 Web 框架中提供组件支持最好的一个。它不仅提供了开箱即用的视图(views)、身份认证(authentication)、会话(sessions)、缓存(caching)、Eloquent、队列(queues)、数据校验(data validation)等组件。甚至还提供了开发工具(Valet 和 Homestead)。
柳公子
2018/09/17
2.3K0
首发!DevOps@BOC — 器用之道,如琢如磨
我来自中国银行软件中心的一个开发部门,中国银行软件中心从 2013年开始试点敏捷软件开发以及相关CI、CD等实践,而我们内部真正的提 DevOps 比这个要更晚些。
DevOps时代
2018/10/08
1.1K0
首发!DevOps@BOC — 器用之道,如琢如磨
Fragment显示和隐藏、绑定和解绑
在上一期我们学习了FragmentManager和FragmentTransaction的作用,并用案例学习了Fragment的添加、移除和替换,本期一起来学习Fragment显示和隐藏、绑定和解绑。
分享达人秀
2018/03/26
2.7K0
Fragment显示和隐藏、绑定和解绑
Laravel开发实战 开发一个类知乎
进入database/migrations/ create_users_table 文件
lilugirl
2019/05/28
5790
点击加载更多

相似问题

如何解绑Facebox?

21

如何解绑jQuery touchwipe?

12

Flowplayer:如何解绑事件?

14

如何解绑keyup事件?

25

如何解绑JS包文件

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档