jQuery有一个很好用的delegate(事件委派)功能,可以给当前以及将来(动态添加)的元素绑定一个事件处理函数。
比如下面的例子,动态添加一个输入文本框后,我想让所有文本框(不管是不是动态添加的)在获取焦点时,自动转大写。
复制代码 代码如下:
<!doctype html>
<html>
<head>
<title>delegate测试</title>
<script type="text/javascript" src="/UploadFiles/2021-04-02/jquery-1.6.js"> <style type="text/css">
*{padding:0;margin:0;list-style:none;margin:5px}
</style>
<script type="text/javascript">
//动态添加一行文本输入框
function addInput(){
$("#ulTarget").append("<li><input type=\"text\" value=\"aaaaaa\"/></li>");
}
$().ready(function(){
$("#ulTarget").delegate(":text","focus",function(){
$(this).val($(this).val().toUpperCase());
});
})
</script>
</head>
<body>
<ul id="ulTarget">
<li><input type="text" value="123456abc"/></li>
<li><input type="text" value="123456abc"/></li>
<li><input type="text" value="123456abc"/></li>
<li><input type="text" value="123456abc"/></li>
</ul>
<button id="btnAdd" onclick="addInput()">add input</button>
</body>
</html>
接下来,我还想加点小功能,在获取焦点时,还要让文本框自动全选。
复制代码 代码如下:
$().ready(function(){
$("#ulTarget").delegate(":text","focus",function(){
$(this).val($(this).val().toUpperCase()).select();
});
})
但是实际测下来,.select()死活就是不起作用,无奈请出setTimeout
复制代码 代码如下:
$().ready(function(){
$("#ulTarget").delegate(":text","focus",function(){
var jqObj = $(this);
jqObj.val(jqObj.val().toUpperCase());
setTimeout(function(){jqObj.select();},100);
});
})
解决了.
delegate,select
更新动态
- 群星《妖神令 影视原声专辑》[320K/MP3][85.23MB]
- 逆水寒手游五子棋第二十三关怎么过 逆水寒手游残局攻略大全
- 逆水寒手游五子棋第二十二关怎么过 逆水寒手游残局攻略大全
- 欢乐钓鱼大师最稀有的鱼是什么 欢乐钓鱼大师最稀有的鱼攻略
- ABC唱片-《蔡琴.三十周年纪念版》6N纯银镀膜[WAV+CUE]
- ABC唱片-《汉斯.德斯辛克.心中布鲁斯》6N纯银镀膜[WAV+CUE]
- 群星《DJ·夜色魅影HQ》头版限量[低速原抓WAV+CUE]
- 《如龙》桐生声优被警察拦下盘问:你有犯罪记录吗?
- 游族2023年净利润0.91亿元 《少年西游记2》即将公测
- 曝快手北京游戏事业部全数被裁 项目测试数据未达标
- 李雨寰.2012-我可是天使【有凰音乐】【WAV+CUE】
- 刘美君.1991-听我细诉【BMG】【WAV+CUE】
- 群星.2016-滚石爱情故事3CD【滚石】【WAV+CUE】
- 欢乐钓鱼大师怎么解锁全地图 欢乐钓鱼大师全地图解锁方法
- 欢乐钓鱼大师锦标赛在哪里进 欢乐钓鱼大师锦标赛入口位置介绍