javascript實作按回車鍵切換焦點_javascript技巧
May 16, 2016 pm 04:15 PM
javascript
回車
前段時間學習了 HTML 和 CSS,對這方面產生了興趣,也開始學習了 javascript 高級程式設計(第三版),這些天也一直在學,剛剛學到事件和表單腳本的內容。前幾天,老師讓寫一段程式碼:是在 javascript 表單中,用回車鍵和上下左右移動鍵使焦點從一個文字方塊移到上一個或下一個文字方塊中。應用目前為止學到的知識試著編寫程式碼,在編寫的過程中遇到了幾個難點:取模計算;在函數內部用 this 和 arguments 找到觸發事件;使用 addHandler() 方法為事件添加事件處理程序。在老師的幫助下解決了以上幾個問題,自己覺得透過這段程式碼學到了很多知識點,所以整理完後寫上註釋,發表一下下。
複製程式碼 程式碼如下:
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form>
<div><input type="text" ></div>
<div><input type="text" ></div>
<div><input type="text" ></div>
<div><input type="text" ></div>
<div><input type="text" ></div>
<div><input type="submit" ></div>
<script><br /> function is_down(e) {<br /> var isDown;<br /> e = e || window.event;<br /> switch (e.keyCode) {<br /> case 13: //以回車鍵<br /> case 39: //朝右移鍵<br /> case 40: //向下移動鍵<br /> isDown = true;<br /> break;<br /> case 37: //以左邊移動鍵<br /> case 38: //使用鍵上移動鍵<br /> isDown = false;<br /> break;<br /> }<br /> return isDown;<br /> }<br /> function key_up(){<br /> //呼叫函數時,且函數本身會產生 this 與 arguments<br /> //以 this 和 arguments 分別找出 field 與觸發的事件<br /> var e=arguments[1];<br /> return is_down(e) === undefined ? true : handle_element(this, is_down(e));<br /> }<br /> function handle_element(field, is_down) {<br /> var elements = field.form.elements;<br /> for (var i = 0, len = elements.length-1; i < len; i ) {<br /> if (field == elements[i]) {<br /> break;<br /> }<br /> }<br /> i = is_down ? (i 1) % len : (i - 1) % len;<br /> //(0===i && is_down) --> 最後一個文字方塊取得焦點後按下向下的鍵<br /> //(-1===i && !is_down) --> 第一個文字方塊取得焦點後按下向上的鍵<br /> if((0===i && is_down)||(-1===i && !is_down)){<br /> return true;<br /> }<br /> elements[i].focus();<br /> var element_arr = ['button', 'submit', 'reset', 'select-one', 'textarea'];<br /> if (element_arr.join(',').indexOf(elements[i].type) > -1)<br /> elements[i].select();<br /> return false;<br /> }<br /> //取消回車預設提交表單事件<br /> document.onkeydown = function(e) {<br /> e = e || window.event;<br /> if(e.keyCode == 13) {<br /> e.preventDefault ? e.preventDefault() : (e.returnValue = false);<br /> }<br /> };<br /> //跨瀏覽器辨識 addEventListener 與 attachEvent(IE)<br /> function addHandler(element, type, handler) {<br /> if (element.addEventListener)<br /> element.addEventListener(type, handler, false);<br /> else if (element.attachEvent)<br /> element.attachEvent("on" type, handler);<br /> else<br /> element["on" type] = handler;<br /> }<br /> var elements = document.forms[0].elements;<br /> for (var i = 0, len = elements.length; i < len; i ) {<br /> //為 keyup 事件新增 key_up 事件處理程序<br /> addHandler(elements[i], "keyup", key_up);<br /> }<br /> </script>
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章
倉庫:如何復興隊友
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗?
3 週前
By 王林

熱門文章
倉庫:如何復興隊友
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗?
3 週前
By 王林

熱門文章標籤

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)