有兩種文本框:
input元素,type=”text”
textarea
文本對象使用select()方法來選擇文本。下面代碼會在文本框獲得焦點時全選文本。
var textbox = document.forms[0].elements["textbox1"];
EventUtil.addHandler(textbox,"focus",function (event) {
event = EventUtil.getEvent(event);
var target = EventUtil.getEvent(event);
target.select();
});
相關事件:
1、select事件
select()方法對應的是一個select事件,在選擇文本框中的文本時會觸發select事件。下面代碼可以在文本內容被選中時顯示該文本的全部內容:
var textbox = document.forms[0].elements["firstText"];
EventUtil.addHandler(textbox,"select",function (event) {
alert(textbox.value);
});
2、獲得選中的文本
如果要取得所選擇的文本,可以通過selectionStart和selectionEnd來完成。
var textbox = document.forms[0].elements["firstText"];
EventUtil.addHandler(textbox,"select",function (event) {
alert(textbox.value.substring(textbox.selectionStart,textbox.selectionEnd));
});
如果要兼容更老版本的話,可以使用下面的代碼:
var textbox = document.forms[0].elements["firstText"];
EventUtil.addHandler(textbox,"select",function (event) {
if (typeof textbox.selectionStart == "number"){
alert(textbox.value.substring(textbox.selectionStart,textbox.selectionEnd));
} else if (document.selection){
alert(document.selection.createRange().text);
}
});
3、用代碼選中文本
var textbox = document.forms[0].elements["firstText"];
textbox.value = "Hello world!";
// 選中所有文本
textbox.setSelectionRange(0,textbox.value.length);
// 選中前3個字符:0,1,2
textbox.setSelectionRange(0,3);
// 選中第4到6的字符:4,5,6
textbox.setSelectionRange(4,7);
// 要看到選擇的文本,需要將焦點設置到文本框
textbox.focus();
為了兼容老的瀏覽器,可以使用以下函數:
function selectText(textbox,startIndex,stopIndex) {
if (textbox.setSelectionRange){
textbox.setSelectionRange(startIndex,stopIndex);
} else if (textbox.createTextRange){
var range = textbox.createTextRange();
range.collapse(true);
range.moveStart("character",startIndex);
range.moveEnd("character",stopIndex-startIndex);
range.select();
}
textbox.focus();
}
14.2.2 過濾輸入
1、屏蔽字符
屏蔽所有字符:
var textbox = document.forms[0].elements["firstText"];
EventUtil.addHandler(textbox,"keypress",function (event) {
event = EventUtil.getEvent(event);
EventUtil.preventDefault(event);
});
只允許輸入數字:
var textbox = document.forms[0].elements["firstText"];
EventUtil.addHandler(textbox,"keypress",function (event) {
event = EventUtil.getEvent(event);
var charCode = EventUtil.getCharCode(event);
if (!/\d/.test(String.fromCharCode(charCode)) && charCode > 9 && !event.ctrlKey){
EventUtil.preventDefault(event);
}
});
其中有新增一個getCharCode方法,并且要理解在js如何使用正則表達式。
2、操作剪貼板
下面代碼會在將內容粘貼到文本框時檢查其是否數字:
EventUtil.addHandler(textbox,"paste",function (event) {
event = EventUtil.getEvent(event);
var text = EventUtil.getClipboardText(event);
if (!/^\d*$/.test(text)){
EventUtil.preventDefault(event);
}
});
14.2.3 自動切換焦點
示例代碼是美國電話號碼,分為3段,長度分別為3,3,4,在每個文本框內容數量達到maxLength時會自動將焦點切換到下一個控件:
<input type="text" name="tel1" id="txtTel1" maxlength="3">
<input type="text" name="tel2" id="txtTel2" maxlength="3">
<input type="text" name="tel3" id="txtTel3" maxlength="4">
(function () {
function tabForward(event) {
event = EventUtil.getEvent(event);
var target = EventUtil.getTarget(event);
if (target.value.length == target.maxLength){
var form = target.form;
for (var i=0,len=form.elements.length;i<len;i++){
if (form.elements[i] == target){
if (form.elements[i+1]){
form.elements[i+1].focus();
}
return;
}
}
}
}
var textbox1 = document.getElementById("txtTel1");
var textbox2 = document.getElementById("txtTel2");
var textbox3 = document.getElementById("txtTel3");
EventUtil.addHandler(textbox1,"keyup",tabForward);
EventUtil.addHandler(textbox2,"keyup",tabForward);
EventUtil.addHandler(textbox3,"keyup",tabForward);
})();
14.2.4 HTML5的約束驗證API
HTML5規范帶有許多約束驗證API,在JS代碼被禁用時也可以進行驗證。
1、必填字段 required
<input type="text" name="tel1" id="txtTel1" maxlength="3" required>
submit時帶有required的字段不能為空。
js代碼中可以通過訪問required屬性來得到:
var textbox = document.forms[0].elements["textbox"]
var isUsernameRequired = textbox.required;
使用下面代碼也可以判斷瀏覽器否支持required屬性:
var isRequiredSupported = ("required" in document.createElement("input"));
2、HTML5中新增的input元素的type屬性
email、url
3、數值范圍
input的type屬性還有如下跟數值有關的屬性:
number、range、datetime、datetime-local、date、month、week、time
它們大多都有min與max和step方法。
還有以下調節數據的方法:
4、輸入模式(正則表達式)
HTML元素支持正則表達式,如下面的text中只允許輸入數字:
<input type="text" pattern="\d+" name="count">
在js代碼中可能通過pattern屬性訪問到HTML中的模式:
var textbox = document.forms[0].elements["count"];
var pattern = textbox.pattern;
可以通過以下代碼判斷瀏覽器是否支持pattern:
var isPatternSupported = "pattern" in document.createElement("input");
5、在JS代碼中檢測表單值有效性
可以對元素使用checkValidity()方法:
var textbox = document.forms[0].elements["count"];
var result = textbox.checkValidity();
也可以對form進行檢測,所有字段通過則會返回true:
if (document.forms[0].checkValidity()){
// 表單中字段全部通過驗證,繼續
} else {
// 表單未全部通過驗證
}
元素的validity屬性則能知道為什么字段有效或無效。
6、禁用驗證
在input或form中都可以添加novalidate來表示不進行驗證。
js中可以通過noValidate屬性來得知元否是否是禁用驗證,也可以通過此值來進行設置:
document.forms[0].noValidate = true;
如果一個表單中有多個提交按鈕,可以一個按鈕中指定formnovalidate屬性。
在js代碼中也可以為按鈕設置該屬性:
按鈕.formNoValidate = true;
必這樣的表單登錄在前端小伙伴的工作中遇到的不少,前幾天小編在做一個網站的時候就遇到這樣一個問題:
下面我們就一一解答:
說起placeholder相信大家都不陌生,這是html5中的新屬性,提供可描述輸入字段預期值的提示信息,該提示會在輸入字段為空時顯示,并會在字段獲得焦點時消失。
默認的placeholder字體顏色是呈淺灰色,如果想改變這個默認顏色,解決方案如下:(這段樣式是把文章開頭的用戶名、密碼、驗證碼的顏色改變成為黃色)
/*input*/
::-webkit-input-placeholder { color:#d2a157 ; }
::-moz-placeholder { color:#d2a157; } /* firefox 19+ */
:-ms-input-placeholder { color:#d2a157; } /* ie */
input:-moz-placeholder { color:#d2a157; }
下面來說說遇到的第二個問題:
用過placeholder占位符的都知道,它獲取焦點之后提示語還在,當鍵入時提示語才會消失,考慮到用戶體驗,項目的要求是,獲取焦點之后,占位符的內容消失,失去焦點之后,占位符內容恢復。(效果如下:)
代碼如下:
<input type="text" tabindex="1" maxlength="12"onfocus ="if (value =='用戶名'){value =''}" onblur="if (value ==''){value='用戶名'}" id="hd_account" value="用戶名">
<input type="password" tabindex="2" maxlength="12" placeholder="密碼" onfocus="this.placeholder=''" onblur="this.placeholder='密碼'" id="hd_passwd" value="">
大家都知道type="password"設定下input中的內容是以“點”的形式出現的,這就導致密碼輸入框不能像用戶名輸入框一樣使用value來顯示其中提示語的內容。
所以簡單的來說可以通過上面代碼中的兩種方法來實現獲取焦點,占位符的內容消失,失去焦點,占位符內容恢復這樣的效果。
HTML5有一些新的表單元素:<datalist>、<keygen>、<output>。不是所有的瀏覽器都支持HTML5新的表單元素,但即使瀏覽器不支持該表單屬性,仍然可以顯示為常規的表單元素。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。