javascript - 的回答了。我就想评论一句,问题就算很容易,也不应该随意踩问题。谁没有一段初学的
天蓬老师
天蓬老师 2017-04-11 12:53:39
[JavaScript讨论组]

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

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(4)
ringa_lee

拼写错误,应该是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();
    }
})
PHPz
<!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>
PHP中文网

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

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

PHP中文网
  1. getElementsByClassName拼写错误,你少写了个s

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号