您现在的位置是:焦点 >>正文

js判断输入框是否为空

焦点534人已围观

简介,用户没填就点提交,后台报错,前端弹窗提示“请输入姓名”。这种场景你我都遇到过。但真写起来,判断“空”这件事,坑比想象中多。 先看最直白的写法: ```javascript const input = ...

,判断用户没填就点提交,输入后台报错,框否前端弹窗提示“请输入姓名”。为空这种场景你我都遇到过。判断但真写起来,输入判断“空”这件事,框否坑比想象中多。为空 先看最直白的判断写法: ```javascript const input = document.getElementById('name'); if (input.value === '') { alert('不能为空'); } ``` 这能拦截完全没输入的情况。但用户敲了个空格再提交呢?输入`value` 是 `' '`,三个空格,框否不等于 `''`,为空直接放行。判断于是输入后台收到一堆空白字符串,数据库里存着看不见的框否“空气”。这算不算空?从业务角度看,当然算。 处理空格,得用 `trim()`: ```javascript if (input.value.trim() === '') { alert('请输入有效内容'); } ``` `trim()` 去掉首尾空格,中间的空格不管。比如用户输入 `' 张 三 '`,trim 后变成 `'张 三'`,这不算空,合理。但如果用户故意输入 `' '`(全角空格)呢?`trim()` 默认只处理半角空格(U+0020),全角空格(U+3000)它不认。这种边缘情况少见,但真遇到,可以加个正则: ```javascript if (input.value.replace(/[\s\u3000]/g, '') === '') { alert('别只敲空格或全角空格'); } ``` `\s` 匹配半角空格、制表符、换行等,`\u3000` 补上全角空格。替换掉所有空白后如果啥也不剩,那就是纯空白输入。 但判断空,不止看内容。有些输入框有默认值,比如 `value="请选择"`,用户没动过,直接提交,这算空吗?算。因为用户没做任何有效选择。这时不能只判断 `value === ''`,得判断值是否等于初始值: ```javascript const defaultVal = '请选择'; if (input.value === defaultVal || input.value.trim() === '') { alert('请选择或填写'); } ``` 还有一种情况:输入框被隐藏了,或者压根不存在。你直接取 `.value` 会报错。稳妥点,先判断元素是否存在: ```javascript const input = document.getElementById('name'); if (!input || input.value.trim() === '') { alert('输入框不可用或为空'); } ``` 这行代码在页面结构动态变化时尤其有用。比如前端框架里,某个输入框可能根据条件渲染,条件不满足时 DOM 里没有这个节点,直接操作就崩。 再往深了说,判断空的时机也有讲究。用户还在打字,你就实时判断,提示“不能为空”,烦不烦?通常等用户失焦(blur)或者提交时再判断。失焦判断能即时反馈,提交判断兜底。两种都做,体验最好: ```javascript const input = document.getElementById('name'); input.addEventListener('blur', function() { if (this.value.trim() === '') { this.style.borderColor = 'red'; } }); // 提交时再验证一次 form.addEventListener('submit', function(e) { if (input.value.trim() === '') { e.preventDefault(); alert('姓名必填'); } }); ``` 最后说个我踩过的坑。移动端输入框,用户用语音输入,或者输入法自动补全,有时候 `input` 事件触发了,但 `value` 还没更新,你这时候去判断,拿到的是旧值。解决方法是监听 `input` 事件时用 `setTimeout` 延迟一下,或者直接监听 `change` 事件,它在值确认后才触发。 判断空,核心就三件事:内容是不是纯空白,值有没有被用户改过,DOM 节点在不在。把这三点想清楚,代码写出来不容易出幺蛾子。别以为 `if (value === '')` 就完事了,真实用户输入千奇百怪,多留个心眼总没错。

Tags:

相关文章

  • 网站建设的网络

    焦点

    上周帮朋友改一个企业站,后台模板里躺着一行注释:“此模块需配合服务器端API使用,前端勿动。”写这行字的人大概想不到,三年后维护这个站的人,连FTP是什么都要百度。网站早就不该叫“网站”了,它是一张由 ...

    【焦点】

    阅读更多
  • 渗透攻击红队百科全书

    焦点

    ```html 渗透攻击红队百科全书 body { font-family: 'Segoe UI', 'PingFang SC', 'Microsoft YaHei', sans-serif ...

    【焦点】

    阅读更多
  • 厦门市人社局官网

    焦点

    打开厦门市人社局官网hrss.xm.gov.cn),首页最显眼的位置永远留给“通知公告”和“办事大厅”。这不是随便排的。2023年我帮朋友查灵活就业社保补贴,从点进官网到下载完申请表,前后不到四分钟。 ...

    【焦点】

    阅读更多


友情链接