的回答了。我就想评论一句,问题就算很容易,也不应该随意踩问题。谁没有一段初学的
拼写错误,应该是getElementsByClassName你少了个s
另外getElementsByClassName获得的是nodeList对象,无法直接绑定事件
假设你的需求是这样的
<input type="text" class="inputw">
<input type="text" class="inputw">
<input type="text" class="inputw">
var inputtwArr = document.querySelectorAll(".inputw");
for(var i = 0, j = inputtwArr.length; i < j; i++) {
(function( i ){
inputtwArr[i].addEventListener("keyup", function(e) {
if(this.value !== "" && this.nextSibling.nextElementSibling ) {
this.nextSibling.nextElementSibling.focus();
return false;
}
})
})(i);
}
var obj=document.getElementsByClassName("inputw");
obj[1].addEventListener("keydown",function(event){
var evt=event||window.event;
if(this.value=="" && evt.keyCode == 8){
this.previousElementSibling.focus();
}
})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<input type="text" class="inputw">
<input type="text" class="inputw">
<input type="text" class="inputw">
<script>
[].slice.call(document.getElementsByClassName('inputw'),0)
.forEach(function(el){
var addEvent = 'attachEvent' in el ? 'attachEvent' : 'addEventListener';
var eventName = 'attachEvent' in el ? 'onkeydown' : 'keydown';
el[addEvent](eventName,function(ev){
var evt = ev || window.event;
var pr = el.previousElementSibling || el.previousSibling;
var value = el.value;
var key = event.which || event.charCode || event.keyCode;
if(pr.focus && el.value === "" && +key === 8){
pr.focus();
}
},false);
});
</script>
</body>
</html>
https://jsfiddle.net/L24vrvfu/
function keydown(e) {
var e = e || window.event;
if (e.keyCode === 8) {
// e.target 就是触发事件那个控件
var prev = e.target.previousSibling;
// prev 有可能是 #text,就是两个 input 之间的空白字符,
// 其 nodeType 是 3,这种情况下要继续往前找
while (prev && prev.nodeType === 3) {
prev = prev.previousSibling;
}
// 有可能是第一个 input,没有 prev
if (prev) {
prev.focus();
}
}
}
var inputs = document.getElementsByClassName("inputw");
// 自己写循环绑定事件,
// inputs 是个伪数组,不能直接用 .forEach(),
// 虽然可以用 [].forEach.call(),但这里加个事件而已,没必要
for (var i = 0; i < inputs.length; i++) {
inputs[i].addEventListener("keydown", keydown);
}
顺便说一下,你的拼写错误太多了
getElementByClassName
-> getElementsByClassName
functon
-> function
previousSbiling
-> previousSibling
打字要仔细啊,有时候拼写错误要害死人
13 回答13.1k 阅读
7 回答2.3k 阅读
3 回答1.4k 阅读✓ 已解决
6 回答1.5k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
getElementsByClassName拼写错误,你少写了个s
getElementsByClassName返回的是一个NodeList,获取其中的节点方法跟获取数组中某一项一样,所以绑定事件应该是obj[0].addEventListener或者这样获取getElementsByClassName("xxx")[0]