如何结合if条件实现Angular输入框的focusout事件逻辑?
实现输入框失焦时仅非空触发逻辑的方案
嘿,这个需求其实挺常见的,核心就是在失焦事件里先判断输入内容是否有效,再决定要不要执行后续逻辑,我给你整理了几种常用的实现方式:
原生JavaScript实现
先看最基础的原生写法,适配所有场景:
HTML结构
<input type="text" id="targetInput"> <div id="errorTip" style="color: #ff4d4f; display: none;">输入不能为空哦</div>
JavaScript逻辑
const input = document.getElementById('targetInput'); const errorTip = document.getElementById('errorTip'); // 保留你原有的回车逻辑 input.addEventListener('keydown', (e) => { if (e.key === 'Enter') { const trimmedVal = input.value.trim(); if (!trimmedVal) { errorTip.style.display = 'block'; } else { errorTip.style.display = 'none'; // 这里放你回车时要执行的逻辑,比如提交表单 console.log('回车提交内容:', trimmedVal); } } }); // 新增的失焦逻辑 input.addEventListener('focusout', () => { const trimmedVal = input.value.trim(); // 仅当输入内容非空(且不是纯空格)时触发逻辑 if (trimmedVal) { errorTip.style.display = 'none'; // 这里写你失焦时要执行的操作,比如自动保存草稿、字段验证等 console.log('失焦触发逻辑,内容为:', trimmedVal); } // 如果内容为空,啥也不做,也可以根据需求保留错误提示 });
关键点说明:
- 用
trim()是为了过滤用户只输入空格的情况,如果你的业务允许空格作为有效内容,直接用input.value !== ''判断就行 - 失焦事件里的逻辑只会在内容有效时执行,完美符合你的需求
Vue框架实现(以Vue3为例)
如果是在Vue项目里,写法会更简洁:
<template> <input v-model="inputContent" @keydown.enter="handleEnterSubmit" @focusout="handleInputBlur" placeholder="请输入内容" > <div v-show="showError" style="color: #ff4d4f; margin-top: 8px;">输入不能为空哦</div> </template> <script setup> import { ref } from 'vue'; const inputContent = ref(''); const showError = ref(false); // 原有回车逻辑 const handleEnterSubmit = () => { const trimmedVal = inputContent.value.trim(); if (!trimmedVal) { showError.value = true; } else { showError.value = false; // 回车提交逻辑 console.log('回车提交:', trimmedVal); } }; // 失焦逻辑 const handleInputBlur = () => { const trimmedVal = inputContent.value.trim(); if (trimmedVal) { showError.value = false; // 失焦时执行的操作 console.log('失焦触发逻辑:', trimmedVal); } }; </script>
核心思路总结
不管用哪种方式,本质都是:
- 给输入框绑定
focusout(原生)或@focusout(Vue)事件 - 在事件处理函数中先对输入值做校验(非空/非纯空格)
- 只有校验通过时,才执行你想要的失焦逻辑;否则直接跳过
这样就能精准实现“仅当输入框有内容时才触发失焦事件逻辑”的需求啦!
内容的提问来源于stack exchange,提问作者Mr world wide
相关产品推荐
相关产品推荐

