的回答了。我就想评论一句,问题就算很容易,也不应该随意踩问题。谁没有一段初学的

的回答了。我就想评论一句,问题就算很容易,也不应该随意踩问题。谁没有一段初学的

阅读 2.6k
4 个回答
  1. getElementsByClassName拼写错误,你少写了个s

  2. getElementsByClassName返回的是一个NodeList,获取其中的节点方法跟获取数组中某一项一样,所以绑定事件应该是obj[0].addEventListener或者这样获取getElementsByClassName("xxx")[0]

拼写错误,应该是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

打字要仔细啊,有时候拼写错误要害死人

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题