做了一个简单的小说系统。
在阅读小说页面使用键盘左右键翻页,回车键返回首页。
<script type="text/javascript">
        document.onkeydown = jumpPage;
        function jumpPage() {
            var event = document.all ? window.event : arguments[0];
            var prev = document.getElementById("prev").href;
            var next = document.getElementById("next").href;
            if (event.keyCode == 37) document.location = prev;
            if (event.keyCode == 39) document.location = next;
            if (event.keyCode == 13) document.location = "/";
        }
    </script>
但是在阅读页面,还有一个添加评论的功能,有一个多行文本框,用户有可能在添加评论时使用回车键来换行,结果导致触发上面的回车键事件,页面转向到了首面。这个代码怎么优化?在评论框中使用回车键时不触发上面的if (event.keyCode == 13) document.location = "/";。

解决方案 »

  1.   

    评论框取得焦点时 document.onkeydown = null;
    评论框失去焦点时 document.onkeydown = jumpPage;
      

  2.   

            document.onkeydown = jumpPage;
            function jumpPage() {
                var event = document.all ? window.event : arguments[0];
    if(event.srcElement.tagName.toLowerCase()=="textarea") return;
                var prev = document.getElementById("prev").href;
                var next = document.getElementById("next").href;
                if (event.keyCode == 37) document.location = prev;
                if (event.keyCode == 39) document.location = next;
                if (event.keyCode == 13) document.location = "/";
            }
      

  3.   

    再评论框事件方法结束时加入event.stopPropagation();
      

  4.   

    考虑兼容
    if (event.stopPropagation) {
    // this code is for Mozilla and Opera
    event.stopPropagation();
    }
    else if (window.event) {
    // this code is for IE
    window.event.cancelBubble = true;
    }
    阻止冒泡事件