如何让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 相关文章推荐
为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
Nov 24 Javascript
extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
Apr 02 Javascript
js 一个关于图片onload加载的事
Nov 10 Javascript
JS函数重载的解决方案
May 13 Javascript
angularjs实现与服务器交互分享
Jun 24 Javascript
JavaScript编程学习技巧汇总
Feb 21 Javascript
基于jquery日历价格、库存等设置插件
Jul 05 jQuery
Angular.js组件之input mask对input输入进行格式化详解
Jul 10 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
Dec 22 Javascript
解决axios会发送两次请求,有个OPTIONS请求的问题
Oct 25 Javascript
微信小程序实现左右列表联动
May 19 Javascript
微信网页登录逻辑与实现方法
Apr 29 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
世界咖啡生产者论坛呼吁:需要立即就咖啡价格采取认真行动
2021/03/06 咖啡文化
php算法实例分享
2015/07/14 PHP
PHP中addcslashes与stripcslashes函数用法分析
2016/01/07 PHP
Yii框架中jquery表单验证插件用法示例
2016/10/18 PHP
PHP带节点操作的无限分类实现方法详解
2016/11/09 PHP
php版阿里大于(阿里大鱼)短信发送实例详解
2016/11/30 PHP
PHP接口类(interface)的定义、特点和应用示例
2020/05/18 PHP
对象的类型:本地对象(1)
2006/12/29 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
2011/11/15 Javascript
Jquery的hover方法让鼠标经过li时背景变色
2013/09/06 Javascript
javascript实现存储hmtl字符串示例
2014/04/25 Javascript
使用原生js实现页面蒙灰(mask)效果示例代码
2014/06/20 Javascript
Javascript 绘制 sin 曲线过程附图
2014/08/21 Javascript
jQuery实现的精美平滑二级下拉菜单效果代码
2016/03/28 Javascript
纯js实现手风琴效果代码
2020/04/17 Javascript
Vue中使用Sortable的示例代码
2018/04/07 Javascript
浅析Vue.js 中的条件渲染指令
2018/11/19 Javascript
JavaScript使用localStorage存储数据
2019/09/25 Javascript
JavaScript实现单图片上传并预览功能
2019/09/30 Javascript
vue实现微信浏览器左上角返回按钮拦截功能
2020/01/18 Javascript
mpvue 项目初始化及实现授权登录的实现方法
2020/07/20 Javascript
[56:24]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第二局
2016/03/04 DOTA
[01:05:41]EG vs Optic Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
PHP魔术方法__ISSET、__UNSET使用实例
2014/11/25 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
2018/08/22 Python
Python全栈之列表数据类型详解
2019/10/01 Python
浅谈three.js中的needsUpdate的应用
2012/11/12 HTML / CSS
世界上最大的乐器零售商:Guitar Center
2017/11/07 全球购物
Subside Sports德国:足球球衣和球迷商品
2019/06/08 全球购物
C语言编程练习
2012/04/02 面试题
SQL Server的固定数据库角色都有哪些?对应的服务器权限有哪些?
2013/05/18 面试题
环境工程大学生个人的自我评价
2013/10/08 职场文书
最美乡村医生事迹材料
2014/06/02 职场文书
小学校本教研总结
2015/08/13 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书
python 实现定时任务的四种方式
2021/04/01 Python