点击输入框触发单次弹窗的代码问题修复咨询
问题分析与修复方案
咱们来拆解你这段代码里的问题,然后给出对应的修复方案:
存在的几个问题
- HTML元素重复定义id:你的
<input>标签同时写了id="input_text"和id="target",HTML规范里一个元素只能有唯一的id属性,浏览器只会识别第一个id,直接导致jQuery选择器$("#target")找不到目标元素,事件绑定自然失效。 - jQuery代码执行时机错误:你把绑定事件的代码写在了
<input>元素前面,这时候浏览器还没渲染出这个输入框,$("#target")获取不到DOM节点,绑定的事件根本不会生效。 - 事件与提示文本不匹配(非功能性但易混淆):你用的是
.focus()事件,但弹窗提示的是.select()的handler,虽然不影响功能,但容易让人误解事件类型。
修复后的代码示例
方案一:调整脚本位置到元素之后(简单直接)
<input id="target"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script> $("#target").focus(function() { alert("Handler for .focus() called."); }); </script>
方案二:用DOM ready包裹代码(脚本位置不受限制)
如果不想调整脚本位置,可以用jQuery的$(document).ready()确保代码在DOM完全加载后再执行:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script> $(document).ready(function() { $("#target").focus(function() { alert("Handler for .focus() called."); }); }); </script> <input id="target">
如果确实需要保留input_text作为id,只需要统一选择器和HTML的id即可:
<input id="input_text"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script> $("#input_text").focus(function() { alert("Handler for .focus() called."); }); </script>
补充小提示
- 你用的jQuery 2.1.1版本对旧浏览器(比如IE8及以下)兼容性不错,如果是面向现代浏览器,也可以考虑使用更新的版本,但这个版本完全能满足你的需求。
.focus()事件正好对应“点击输入框获得焦点”的场景,完全符合你的需求。
内容的提问来源于stack exchange,提问作者user8156106
相关产品推荐
相关产品推荐

