- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
谁能解释一下为什么小键盘的 keyup 和 keydown 事件返回不同的键值?
考虑一下:
<input type="text" />
<script>
document.getElement('input').addEvents({
'keydown':function(e){
console.log('keydown: code:' + e.code + ', key:' + e.key);
},
'keyup':function(e){
console.log('keyup : code:' + e.code + ', key:' + e.key + '\n');
}
});
</script>
我原以为每个事件都会为 keydown 和 keyup 返回相同的键值,但相反,我得到了以下输出(在按下 0、1、2、8 和 9 之后):
keydown: code:96, key:0
keyup : code:96, key:`keydown: code:97, key:1
keyup : code:97, key:akeydown: code:98, key:2
keyup : code:98, key:bkeydown: code:104, key:8
keyup : code:104, key:hkeydown: code:105, key:9
keyup : code:105, key:i
通常我会使用按键,因此从来没有遇到过任何问题。当在键盘上按下相应的小键盘键时,我在屏幕上突出显示小键盘代表按钮时遇到了这个问题(向下突出显示,向上删除突出显示)。
有什么想法吗?
最佳答案
不同浏览器实现keydown、keypress、keyup事件的方式乱七八糟,连keydown、keyup事件中的keyCode值都还没有standardized跨浏览器。
目前,事件对象具有三个包含有关按下的键的信息的属性:
按下的键的值存储在 keyCode 或 charCode 属性中,但不会同时存储,keyCode 总是在 keydown 和 keyup 事件中设置,charCode 在 keypress 事件中设置。
因此,例如,如果您按“e”:
- keydown and keyup reports:
- charCode=0, keyCode=69, which=69 - caracter at number 69 is capital letter E
- keypress reports:
- charCode=101, keyCode=0, which=101 - caracter at number 101 is small letter e
如果你在小键盘上按数字 9:
- keydown and keyup reports:
- charCode=0, keyCode=105, which=105 - caracter at number 105 is small letter i
- keypress reports:
- charCode=57, keyCode=0, which=57 - caracter at number 57 is digit 9
Mootools 试图通过添加 event.code 和 event.key 属性来标准化:
event.code = event.which || event.keyCode;
event.key = String.fromCharCode(code).toLowerCase();
它也为小键盘上的数字转换 keyCodes,但只针对 keydown 事件(版本 1.4.5),而不是 keyup。我不知道这是不是有意为之,但是通过替换 mootools-core-1.4.5-full-nocompat.js
中的第 1163 行,可以轻松修改 keyup 事件以具有相同的行为来自:
if (type == 'keydown') {
到:
if (type == 'keydown' || type == 'keyup') {
这样 keyup 事件中的 keyCodes 也会被转换。
有趣的是,Mozilla Developer Network说:
'charCode', 'keyCode' and 'which' is deprecated, you should use 'char' or 'key' instead, if available.
但我还没有在 Firefox 或 Chrome 中看到该实现。 jQuery 向事件对象添加了“key”属性,但它始终是“undefined”(可能取决于浏览器实现)。
关于Mootools:小键盘 keyup 和 keydown 事件在同一键上返回不同的键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16961386/
我试图在Mootools [1.11版]中匹配多个CSS属性,如以下元素所示: 我想匹配具有type ='radio'和value ='dev'属性的元素。尝试了这个,但这不起作用 $$('inpu
问题:是否有到 mootools 核心及更多库的可靠/永久链接? 我升级了 mootools 幻灯片并使其可用 online如果有人需要的话。但希望有一个谷歌链接 对于 javascript 库,但没
我正在使用 MooTools 1.12 如何在悬停时将类添加到 a 元素? 例如 我有这个 Some text Some text Some text Some text anf 当鼠标悬停在链接上时
我继承了一个网站项目,其中大部分脚本都包含 mootools.js(大约 40k)。但是,凭直觉,我还没有看到它在哪里使用,考虑到这个项目的性质,咳咳,我认为它可能根本没有被使用! 今晚我“迫于压力”
我在 Google map 应用程序中使用 Mootools 来做一些事情,例如 bumpboxes 和其他东西。在我添加 Mootools 脚本之前,一切都 100% 正常工作,无论我是在声明我的全
如何使用 Mootools 通过 id 检查元素的存在 最佳答案 html: some content javascript var foo = document.id('foo'); // or $
我正在尝试将大约 200 行 jQuery 代码转换为 MooTools,以避免在现有站点上包含两个库。我只有一行有问题: new Element('span', {text: ' » '
Please select product ... 我尝试使用 Firefox 并且它工作正常 $('selectId').innertHTML = 'Test test' 但在 ie 上,它不
我有 5 个 a 元素需要注入(inject)额外的 span ,而不是创建新元素 5 次我怎么能只做一次呢?我试过了 var holders= $$('.holders'); holders.eac
我有 5 个 a 元素需要注入(inject)额外的 span ,而不是创建新元素 5 次我怎么能只做一次呢?我试过了 var holders= $$('.holders'); holders.eac
有人有在同一页面中使用 Closure js lib 和 Mootools 的经验吗? 有冲突还是工作正常? 最佳答案 根据谷歌: The names of all Closure Library f
我试图让 SqueezeBox 弹出窗口在打开页面时自动打开,但我使用的代码打开了弹出窗口,但弹出内容未加载。 我不太熟悉,因此我需要一些帮助来了解我做错了什么 window.addEvent('do
我正在学习 mootools。我有一个以下格式的数组。我想在 for 循环中遍历它,但不知道该怎么做。 {'apple' : { 'prize' : 10 , 'color' : 'Red' } ,
要在我的网站上设置元素的 html,我主要使用 $('elementId').innerHTML = "text"; 浏览 mootools 文档,我发现给出了这个例子: $('myElement')
我这里有一个 Mootools 1.1 类,我想将其在 Mootools 1.3 中运行。onComplete 函数不知何故无法将“数据”结果发送到 processResults 函数。 Ajax 调
我有这个 Mootools 1.11 脚本,它在提交表单后更新 div,表单将数据发送到“form.php”文件并返回类似“表单已发送”的消息。 我想把它转换成 mootools 1.4.1 Moot
我正在从服务器检索一些数据并更新 div 的 html 内容,如下所示: var req = new Request.JSON({ method: 'get', url: 'index
我看到了用 jquery 获取第二类名称的方法,但是如何在 mootools 中做到这一点,我的元素是 我需要匹配完整的类名,例如 li.parent.active 并调整高度(如果我尝试过该类存在
我正在使用 MooTools,但我似乎无法执行以下代码。我期望它将 #bar 元素的宽度增加到 50px,然后 alert() 带有“hi!”,并且然后继续将#bar的宽度增加到200px。不管出于什
我有一个当前正在调用 .hide() 的 Element 对象。相反,我想将整个元素(及其子元素)的不透明度淡出到 100%(隐藏),作为可能超过 500 毫秒或 1000 毫秒的过渡效果。 Fx.T
我是一名优秀的程序员,十分优秀!