如何让div span等元素能响应键盘事件操作指南


Posted in Javascript onNovember 13, 2012

在我这几天的工作中遇到了一个问题,google了一下找到了解决方案,不过是英文的,我简单翻译下让更多的人能看懂
译文如下
我有一个可编辑的div,并且在DIV里面还有一个可编辑的span,我想要让span能响应键盘事件,
这里是测试JS代码:

$(function() 
{ 
$('#someid').keypress(function(event){alert('test');}); 
});

这里是测试html代码
<div id="mydiv" contenteditable="true"> 
editable follows:<span id="someid" contenteditable="true">Some TEXT</span> 
</div>

如果你在浏览器中测试,你会看见,当你在Some TEXT上press key时,没有‘test'弹出框弹出,我知道这个问题的发生原因是因为事件是从span的父节点div发出来的,所以span没有触发到事件,当然也是因为span没有焦点造成的,所以我想要谁帮助我找出解决方案。
最终终于有好心人帮助解决了这个问题
关于你的问题的解决方案代码我已经提交到了http://jsfiddle.net/gaby/TwgkC/3/ 并且工作正常
在FF, Opera, Chrome, Safari, IE8 ..中测试
#someid需要获得焦点才能触发keypress,如果你想要你的代码获得焦点在元素创建后立即使用.focus()方法
function AppendSpan() 
{ 
$('#mydiv').append('<span id="someid" contenteditable="true">Some TExt</span>'); 
//Then I want to handle the keypress event on the inserted span 
$('#someid').keypress(function(event){ 
//do something here 
alert(this.id); 
}).focus();// bring focus to the element once you append it.. 
}

追加:
两个方法来触发事件,(事实上需要使用contenteditable属性),不确定你是否能接受这种情况
1、包裹一个可编辑span在另一个的外层,并且设置它的属性contenteditable="false"
demo js:
function AppendSpan() 
{ 
$('#mydiv').append('<span contenteditable="false"><span id="someid" contenteditable="true">Some TExt</span></span>'); 
//Then I want to handle the keypress event on the inserted span 
$('#someid').keypress(function(event){alert('test');}); 
} 
$(function() 
{ 
$('#mydiv').keypress(function(event){AppendSpan();}); 
});

demo html:
<div id="mydiv" contenteditable="true"> 
editable follows: 
</div>

2、让你的#mydiv处在非编辑状态,当你需要触发span的键盘事件时
demo js:
function AppendSpan() 
{ 
$('#mydiv').removeAttr('contenteditable').append('<span id="someid" contenteditable="true">Some TExt</span>'); 
//Then I want to handle the keypress event on the inserted span 
$('#someid').keypress(function(event){alert('test');}); 
} 
$(function() 
{ 
$('#mydiv').keypress(function(event){AppendSpan();}); 
});

demo html:
<div id="mydiv" contenteditable="true"> 
editable follows: 
</div>
Javascript 相关文章推荐
javascript offsetX与layerX区别
Mar 12 Javascript
Query中click(),bind(),live(),delegate()的区别
Nov 19 Javascript
js实现百度联盟中一款不错的图片切换效果完整实例
Mar 04 Javascript
简单实现JS对dom操作封装
Dec 02 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
Apr 29 Javascript
jquery计算出left和top,让一个div水平垂直居中的简单实例
Jul 13 Javascript
js实现简单的碰壁反弹效果
Aug 30 Javascript
js两种拼接字符串的简单方法(必看)
Sep 02 Javascript
JS触摸屏网页版仿app弹窗型滚动列表选择器/日期选择器
Oct 30 Javascript
JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码
Sep 23 jQuery
js 将多个对象合并成一个对象 assign方法的实现
Sep 24 Javascript
利用JavaScript模拟京东按键输入功能
Dec 01 Javascript
给artDialog 5.02 增加ajax get功能详细介绍
Nov 13 #Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
Nov 13 #Javascript
Google的跟踪代码 动态加载js代码方法应用
Nov 12 #Javascript
Javascript开发之三数组对象实例介绍
Nov 12 #Javascript
在浏览器窗口上添加遮罩层的方法
Nov 12 #Javascript
php对mongodb的扩展(小试牛刀)
Nov 11 #Javascript
php对mongodb的扩展(初识如故)
Nov 11 #Javascript
You might like
如何使用PHP获取网络上文件
2006/10/09 PHP
PHP中文分词 自动获取关键词介绍
2012/11/13 PHP
ThinkPHP之foreach标签使用概述
2014/06/30 PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
2015/02/12 PHP
php的闭包(Closure)匿名函数初探
2016/02/14 PHP
jquery 简短右键菜单 多浏览器兼容
2010/01/01 Javascript
JavaScript判断用户是否对表单进行了修改的方法
2015/03/18 Javascript
JS面试题---关于算法台阶的问题
2016/07/26 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
2016/09/19 Javascript
js仿iphone秒表功能 计算平均数
2017/01/11 Javascript
Vue 组件参数校验与非props特性的方法
2019/02/12 Javascript
Vue中UI组件库之Vuex与虚拟服务器初识
2019/05/07 Javascript
JS数组的常用10种方法详解
2020/05/08 Javascript
vue2.0实现列表数据增加和删除
2020/06/17 Javascript
详解JavaScript自定义函数
2020/07/29 Javascript
[53:21]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-CDEC
2014/05/22 DOTA
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
Windows系统下安装Python的SSH模块教程
2015/02/05 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
2018/06/14 Python
Python实现的删除重复文件或图片功能示例【去重】
2019/04/23 Python
Python中psutil的介绍与用法
2019/05/02 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
2020/01/13 Python
matlab中imadjust函数的作用及应用举例
2020/02/27 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
2020/05/26 Python
Python sklearn中的.fit与.predict的用法说明
2020/06/28 Python
用python实现一个简单计算器(完整DEMO)
2020/10/14 Python
英国在线购买轮胎、预订汽车、汽车维修和装配网站:Protyre
2020/04/12 全球购物
万代美国官网:PREMIUM BANDAI USA
2020/09/11 全球购物
广州品高软件.net笔面试题目
2012/04/18 面试题
建筑经济管理专业求职信分享
2014/01/06 职场文书
物业公司的岗位任命书
2014/06/06 职场文书
党的群众路线教育实践活动对照检查材料
2014/09/22 职场文书
2015年毕业实习工作总结
2015/05/29 职场文书
收入证明范本
2015/06/12 职场文书
Golang 实现WebSockets
2022/04/24 Golang
python双向链表实例详解
2022/05/25 Python