- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此,当我按下键盘上的箭头键(向左、向右、向上、向下)时,绿色悬停颜色会转到相应的按钮。
我想要做的是,每次按下“返回”或“输入”键(键码 13)时,都会在屏幕上写下相应的数字。
例如,如果绿色悬停颜色为 2 并且我按下“Return/Enter”键,则在屏幕上写下“Two”。我希望鼠标也能发生同样的事情。例如,如果我点击 2 ,在屏幕上写上“Two”。
我怎样才能做到这一点?
当然,在所有这些方面更好的编码总是受欢迎的。
非常感谢!!!
var columns = 0;
var rowButtons = 0;
var $rows = $('.multiple');
var buttonSelected;
var arrows = { left: 37, up: 38, right: 39, down: 40, enter: 13 };
$(window).keydown(function(e) {
if (Object.values(arrows).indexOf(e.which) > -1) {
e.preventDefault();
$('.multiple button').removeClass('selected');
switch (e.which) {
case arrows.up:
rowButtons = rowButtons == 0 ? $rows.length - 1 : rowButtons - 1;
break;
case arrows.down:
rowButtons = rowButtons == $rows.length - 1 ? 0 : rowButtons + 1;
break;
case arrows.left:
$buttonsInRow = $('.multiple:eq(' + rowButtons + ') button');
columns = columns == 0 ? $buttonsInRow.length - 1 : columns - 1;
break;
case arrows.right:
$buttonsInRow = $('.multiple:eq(' + rowButtons + ') button');
columns = columns == $buttonsInRow.length - 1 ? 0 : columns + 1;
break;
case arrows.enter:
rowButtons = rowButtons == $rows.click;
document.getElementById("screen").innerHTML ="one"
break;
}
buttonSelected = $('.multiple:eq(' + rowButtons + ') button:eq(' + columns + ')');
buttonSelected.addClass('selected');
}
});
#screen {
width:100%;
padding:20px;
background: #222;
color:lime;
}
button.selected {
background: green
}
.multiple button {
border: 1px solid blue;
color: #222;
padding: 10px 25px;
cursor: pointer;
width:25%;
}
.multiple button:hover {
background-color: orange;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="screen">--</button>
<div class="multiple">
<button>1</button>
<button>2</button>
<button>3</button>
</div>
<div class="multiple">
<button>4</button>
<button>5</button>
<button>6</button>
</div>
<div class="multiple">
<button>7</button>
<button>8</button>
<button>9</button>
</div>
最佳答案
对于箭头键:
既然你有 columns
和 rowButtons
变量,您可以计算当前悬停在哪个数字上。每行构成移动三列。所以如果我们有 rowButtons = 1
那么列位置将在 4(这是第二行的开始)。因此,如果我们想知道我们如何移动数字,我们可以做 rowButtons * 3
来计算那部分。然后留下列:每次 columns
增加 1,数字也向上移动 1(数字是我们键盘上的位置)。所以我们可以添加 columns
到 rowButtons * 3
获取数值,但由于 columns
从零开始(以 1 开头的列表示 columns = 0
)我们需要加一才能得到精确的值,所以我们得到:
rowButtons * 3 + columns + 1
所以我们现在已经计算了数字,但由于您似乎想要字符串值,我们可以向我们的 javascript 添加一个对象,其中每个键是从数字到字符串的映射(又名
2: "two"
)。
var columns = 0;
var rowButtons = 0;
var $rows = $('.multiple');
var buttonSelected;
var arrows = {
left: 37,
up: 38,
right: 39,
down: 40,
enter: 13
};
var tableValues = {
1: "one",
2: "two",
3: "three",
4: "four",
5: "five",
6: "six",
7: "seven",
8: "eight",
9: "nine"
};
$(window).keydown(function(e) {
if (Object.values(arrows).indexOf(e.which) > -1) {
e.preventDefault();
$('.multiple button').removeClass('selected');
switch (e.which) {
case arrows.up:
rowButtons = rowButtons == 0 ? $rows.length - 1 : rowButtons - 1;
break;
case arrows.down:
rowButtons = rowButtons == $rows.length - 1 ? 0 : rowButtons + 1;
break;
case arrows.left:
$buttonsInRow = $('.multiple:eq(' + rowButtons + ') button');
columns = columns == 0 ? $buttonsInRow.length - 1 : columns - 1;
break;
case arrows.right:
$buttonsInRow = $('.multiple:eq(' + rowButtons + ') button');
columns = columns == $buttonsInRow.length - 1 ? 0 : columns + 1;
break;
case arrows.enter:
// find the column and row position:
var pos = (rowButtons * 3) + columns + 1;
console.log(pos);
rowButtons = rowButtons == $rows.click;
document.getElementById("screen").innerHTML = tableValues[pos];
break;
}
buttonSelected = $('.multiple:eq(' + rowButtons + ') button:eq(' + columns + ')');
buttonSelected.addClass('selected');
}
});
$("button").click(function() {
let pos = $(this).text();
document.getElementById("screen").innerHTML = tableValues[pos];
});
#screen {
width: 100%;
padding: 20px;
background: #222;
color: lime;
}
button.selected {
background: green
}
.multiple button {
border: 1px solid blue;
color: #222;
padding: 10px 25px;
cursor: pointer;
width: 25%;
}
.multiple button:hover {
background-color: orange;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="screen">--</button>
<div class="multiple">
<button>1</button>
<button>2</button>
<button>3</button>
</div>
<div class="multiple">
<button>4</button>
<button>5</button>
<button>6</button>
</div>
<div class="multiple">
<button>7</button>
<button>8</button>
<button>9</button>
</div>
关于javascript - 在悬停颜色上提交/更改多个innerHTML,使用键码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69692744/
我有一个非常简单的函数,用于替换元素的innerHTML。我已经尝试调试这个问题几个小时了,但就是做不到,这令人恼火。 当从按钮调用时,按下 JavaScript(如下)可以正常工作,但是当从另一个函
我正在开发的代码片段有四个带有 javascript 的内部 html,现在我的问题是我们能否从所有这些数据中获取所有这些数据并添加(如果是整数)它们或连接(如果是字符串)并显示在另一个 div 标签
我正在使用 [innerHTML]显示一个字符串。字符串由同一对象的两个属性组成。该对象来自将对象列表(来自 NgRx 的 Observable)传递给 *ngFor .此外,管道用于决定应该在 [i
首先,我对编码完全陌生,并且一直在空闲时间使用自学工具学习 Javascript。我已经学到了足够的知识来开始构建自己的项目。我的第一次尝试是构建一个随机发生器(在本例中为随机餐厅名称)。 Javas
如题,这些span元素在浏览器中以两种样式显示,为什么? function loadHTML() { var html = 'sfdssfds';
我有一个格式如下的 HTML 文件: subject detail important subject detailimportant 我写了一个 PHP 代码来自动获取每个 p1 并将它们插入到我的
我希望这个主题符合问题。 嘿,请原谅我的笨蛋,但我一直在绞尽脑汁地试图解决这个问题。 代码: chapter 1';">Wonderful 我想要的是显示一个名为“Wonderful”的链接,
我正在调用一个打印到 div 的函数,然后返回一个也打印到 div 的字符串。以下将只打印“二”,但我期待它先打印“一”再打印“二”: global_cdiv = "view" fu
我有一个 不是 contentEditable 的 div。我捕获击键,将关联的字符插入到内存中的字符串中,然后调用 render() 函数用当前字符串替换 div 的 innerHTML。 我的问题
假设我们在页面上有一个 DIV x,我们想将那个 DIV 的内容复制(“复制粘贴”)到另一个 DIV y 中。我们可以这样做: y.innerHTML = x.innerHTML; 或使用 jQuer
我正在尝试根据 javascript 函数填充的数字更改 div 的innerHTML。不幸的是,我收到了一个错误,但我不确定为什么。 伪代码 如果number > 2将innerHTML更改为秒,否
我正在使用 ServiceNow 和 Angular.js 构建的网站上进行开发。页面似乎工作正常,直到我将 body 替换为自身后,所有 Buttons/onClicks 或搜索都停止响应..有人知
带有 [innerHtml] 指令的元素似乎只是在该元素内添加声明的 html 字符串,仅此而已; 通过 this stackblitz ,我试图在这样的元素中添加一些东西,但没有成功; new wo
为什么选址 http://xn--wiadomesny-37b.pl/test/抛出 Uncaught TypeError: Cannot set property 'innerHTML' of nu
我的 javascript 获取日期和时间并将其放置在 div 中如下: function print(message){ var div1= document.getElementById("d
在下面的代码中,我尝试以不将猫名称硬编码到 html 的方式设置猫名称。因此我使用的是数组。然而,每当我尝试将innerHTML属性设置为catNames [0]或catNames [1]时,我都会收
我正在使用 mootool 的 Request.JSON 从 Twitter 检索推文。收到它后,我将写入目标 div 的 .innerHTML 属性。当我在本地将其作为文件进行测试时,即 file:
这个问题在这里已经有了答案: How to get Angular2 to bind component in innerHTML (1 个回答) 关闭 6 年前。 所以我正在构建一个 angula
我有一个简短的脚本,它在 innerHTML 中查找具有特定文本的特定类,然后使用 replaceWith 替换整个元素。当只有一段特定的文本时,此方法非常有用,但我有几个项目要查找和替换。 下面的
我正在尝试使用 Wordpress/Woocommerce 上动态生成的 div 类更改“查看购物车”按钮的 innerHTML。我之前问过一个关于这个的问题,有人建议(谢谢 Mike :))因为 J
我是一名优秀的程序员,十分优秀!