首頁  >  文章  >  web前端  >  文字框倒敘輸入讓輸入框的焦點始終在最開始的位置_javascript技巧

文字框倒敘輸入讓輸入框的焦點始終在最開始的位置_javascript技巧

WBOY
WBOY原創
2016-05-16 16:38:011692瀏覽

所謂的文字方塊倒敘輸入是指輸入框的焦點總是在最開始的位置,如圖所示,當我輸入123456789時,在輸入框上顯示的是987654321。


為什麼要做這個Demo?是因為在專案中遇到了,專案需求是兩個輸入框,一個正序輸入,另一個倒敘輸入。 下面我把實作的想法和程式碼寫出來。
文字倒敘輸入:

只要我們保證輸入框的焦點始終在第一位,這樣的話就可以實現每次我們輸入的都在最前面,即倒敘

代碼:

function setPosition(ctrl, pos) { //设置光标位置函数
if (ctrl.setSelectionRange) {
ctrl.focus();
ctrl.setSelectionRange(pos, pos);
} else if (ctrl.createTextRange) {
var range = ctrl.createTextRange(); //创建一个选择区域
range.collapse(true); //将光标移动到选择区域的开始位置
range.moveEnd('character', pos); //改变选择区域结束的位置
range.moveStart('character', pos); //改变选择区域开始的位置
range.select(); //将选择的内容同步到当前的对象
}
}

只要我們將參數pos設為0就可以了。

下面是一個完整的Demo,這個Demo實現了正常刪除和倒敘輸入。

<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<style>
.content {
width: 300px;margin:0 auto;margin-top:50px;
}
ul {
list-style: none;
}
.elem {
width: 200px;
}

</style>
<script src="http://cdn.staticfile.org/jquery/2.1.1-rc2/jquery.min.js"></script>
</head>
<body>
<div >
<ul>
<li>
<input type="text" class="elem">
</li>
<li>
<input type="text" class="elem">
</li>
<li>
<input type="text" class="elem">
</li>
</ul>
</div>
<script>
function setPosition(ctrl, pos) { //设置光标位置函数
if (ctrl.setSelectionRange) {
ctrl.focus();
ctrl.setSelectionRange(pos, pos);
} else if (ctrl.createTextRange) {
var range = ctrl.createTextRange(); //创建一个选择区域
range.collapse(true); //将光标移动到选择区域的开始位置
range.moveEnd('character', pos); //改变选择区域结束的位置
range.moveStart('character', pos); //改变选择区域开始的位置
range.select(); //将选择的内容同步到当前的对象
}
}
$('.elem').on('keypress keyup', function() {
if(event.keyCode === 8)
return;
setPosition(this,0);
});
</script>
</body>
</html>

另外在附上相關的獲取焦點位置的函數,可能你會用到

function getPosition(ctrl) {
// IE Support
var CaretPos = 0; 
if (document.selection) {
ctrl.focus();
var Sel = document.selection.createRange();
Sel.moveStart('character', -ctrl.value.length);
CaretPos = Sel.text.length;
}
// Firefox support
else if (ctrl.selectionStart || ctrl.selectionStart == '0')
CaretPos = ctrl.selectionStart;
return (CaretPos);
}

總結:

實現了設定和獲取文字輸入焦點,我們就可以做一些其他的特效,例如刪除一整個單字或變數等等。

如果你有關於此文的好想法,可以@me,希望此文能夠幫助你!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn