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

在我这几天的工作中遇到了一个问题,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>

(0)

相关推荐

  • js事件(Event)知识整理

    鼠标事件 鼠标移动到目标元素上的那一刻,首先触发mouseover 之后如果光标继续在元素上移动,则不断触发mousemove 如果按下鼠标上的设备(左键,右键,滚轮--),则触发mousedown 当设备弹起的时候触发mouseup 目标元素的滚动条发生移动时(滚动滚轮/拖动滚动条..)触发scroll 滚动滚轮触发mousewheel,这个要区别于scroll 鼠标移出元素的那一刻,触发mouseout 事件注册 平常我们绑定事件的时候用dom.onxxxx=function(){}的形式

  • JavaScript高级程序设计 阅读笔记(十七) js事件

    一.事件流 IE中是冒泡型事件,即从最特定的事件目标到最不特定的事件目标. Netscape Navigator使用的是捕获型事件,这个跟IE中采用的冒泡型事件相反. DOM事件流同时支持两种事件模型,但捕获型事件先发生. 二.事件处理函数/监听函数 事件是用户或浏览器自身进行的特定行为.这些事件都有自己的名字,如click.load.mouseover等. 事件处理函数有两种分配方式:在JavaScript中或者在HTML中. 如果在JavaScript中分配事件处理函数,则首先要获得要处理的

  • javascript 事件处理程序介绍

    1.DOM0级事件处理程序 将一个函数值给一个事件处理程序属性. 例如: 复制代码 代码如下: var btn = document.getElementById("myBtn"); btn.onclick = funtion(){ alert(this.id); //"myBtn" } 删除事件,btn.onclick = null; -----------------------------------------------------------------

  • js模拟点击事件实现代码

    html: 复制代码 代码如下: <h3>请单击"提交",测试提交按钮的单击事件也被触发了.</h3> <button id="btn">提交</button> <form action="#" method="get" id="form"> <input type="text" name="site"

  • JS 控件事件小结

    概述: 事件对于控件来说至关重要,控件的消息通信机制使用事件的成本最低,但是对于JS控件来说有一些麻烦需要解决,JS类本身不支持事件,DOM模型支持的事件仅适应于浏览器的DOM节点.所以创建一套事件是我们写控件之前要做的. 事件机制 对于事件的机制我不想多说,各种语言中对事件的描述都很具体,都是观察者模式的一种实现,我们可以从中抽取出事件必须的接口(由于控件库是基于jQuery 所以接口跟jquery保持一致): 1.on: 绑定事件 2.off: 删除事件 3.fire: 触发事件 4.add

  • JS事件Event元素(兼容IE,Firefox,Chorme)

    好的程序往往是兼容多种浏览器的. 看下例: 一个简单的button,我们可以通过点击下面的button直接通过event对象得到当前的button元素,兼容多浏览器.当然,其他元素事件的写法同. <input type="button" id="btn" name="btn" value="button1" onclick="getEvent(event)"/>

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

    在我这几天的工作中遇到了一个问题,google了一下找到了解决方案,不过是英文的,我简单翻译下让更多的人能看懂 译文如下: 我有一个可编辑的div,并且在DIV里面还有一个可编辑的span,我想要让span能响应键盘事件, 这里是测试JS代码: 复制代码 代码如下: $(function() { $('#someid').keypress(function(event){alert('test');}); }); 这里是测试html代码: 复制代码 代码如下: <div id="mydiv

  • 解读在C#中winform程序响应键盘事件的详解

    在winform程序中给form添加了keyup事件,但是程序却不响应键盘事件,解决办法是重写Form基类的ProcessCmdKey(ref Message msg, Keys keyData)方法. 复制代码 代码如下: protected override bool ProcessCmdKey(ref Message msg, Keys keyData)        {            if (keyData == Keys.F4)            {            

  • jQuery on()方法绑定动态元素的点击事件无响应的解决办法

    $('#check_all').on('click' , function(){ alert(1); }); $("#yujinlist").append(html); count++; } 以上代码执行时,点击#check_all时,alert一直没反应,后在网上查资料时,才知道on前面的元素也必须在页面加载的时候就存在于dom里面, 那原话是这样的: 支持给动态元素和属性绑定事件的是live和on,其中live在JQUERY 1.7之后就不推荐使用了.现在主要用on,使用on的时候

  • 鼠标拖动改变DIV等网页元素的大小的实现方法

    1.初次实现 1.1 html代码 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>div change

  • jquery实现两个div中的元素相互拖动的方法分析

    本文实例讲述了jquery实现两个div中的元素相互拖动的方法.分享给大家供大家参考,具体如下: 这里写了两个实例,两个都是基于jquery实现的.如果有更好的方法,欢迎分享. 第一个效果图: 拖动中: 拖动完成后: 代码实现: <!doctype html> <html> <head> <meta charset="utf-8"> <title></title> <link rel="styles

  • jQuery给div,Span, a ,button, radio 赋值与取值

    jquery给div的innerHTML赋值 $("#id").html()="test"; //或者 $("#id").html("test"); jquery 获取<a>的链接内容 $().innerHTML jquery 给span 赋值 $('#hiddenNote').text('getSpanValues'); span取值 $('#hiddenNote').text(); jquery 给标签butt

  • jQuery自定义元素右键点击事件(实现案例)

    大多数情况下我们使用左键来进行页面交互,而右键大部分对于开发者来说是审查元素的,有的时候我们也要自定义鼠标右键点击行为来达到更好的交互性,常见的有漫画左键前进.右键后退. 第一步我们要屏蔽浏览器默认的右键点击行为,即阻止弹出框. 首先要将阻止弹出函数绑定到目标元素上: //阻止浏览器默认右键点击事件 $("div").bind("contextmenu", function(){ return false; }) 如此一来,div元素的右击事件就被屏蔽了,而浏览器其

  • jquery无法为动态生成的元素添加点击事件的解决方法(推荐)

    遇到 jquery无法为动态生成的元素添加点击事件,谷歌一下,整理一下解决方法如下: (<li>中间的元素是动态生成的), 现在想为<i>添加点击事件, 例子如下: <div> <ul> <li> <span> <i class='icon'>这是元素内容</i> //i是动态生成 </span> </li> </ul> </div> 解决方法如下: $(docu

  • 解决jquery appaend元素中id绑定事件失效的问题

    1. 在jquery中append元素,如果该元素中有id值并且绑定事件,那么该id事件会失效,必须刷新一下才能使用. 2.解决办法: 举例:如果在一个<div class="title"></div>中,通过append添加一个id="demo"的按钮,常用的直接$("Selector").on("eventType",function(){})监听事件函数不起作用,例如该按钮的点击监听事件应该这样写

  • jQuery on()方法绑定动态元素的点击事件实例代码浅析

    之前就一直受这个问题的困扰,在jQuery1.7版本之后添加了on方法,之前就了解过,其优越性高于live(),bind(),delegate()等方法,在此之前项目中想用这个来测试结果发现,居然动态生成的标签点击了没反应,而live方法却能够支持,于是乎到处查资料,问网友,结果找了好久在一篇文章中终于找到了答案... jQuery 使用on绑定动态生成的元素时,不能直接用该对象操作,而是选择其非动态生成的父节点然后再找到本身才能达到效果.大家看看源码就知道了.生成的按钮基数项on方法点击无效l

随机推荐