在HTML中,有兩種方式來表現(xiàn)文本框:
一種是使用input元素的單行文本,另一種是使用textarea的多行文本框。
使用input方式,必須添加type,設(shè)置為“text”。
textarea的初始值則必須放在開始和結(jié)束標(biāo)簽之內(nèi)。
另外,不能在HTML中給textarea指定最大字符數(shù);
一、選擇文本
上述兩種文本框都支持
1、select()方法
下面的代碼是只要文本框獲得焦點,就會選擇全部的文本:
var textBox = document.getElementById("myForm").elements["firstName"];//設(shè)置默認(rèn)值textBox.value = "input your firstName";//設(shè)置事件textBox.addEventListener("focus", function () {  event.target.select();});2、select事件
何時觸發(fā)該事件:
如:
var textBox = document.getElementById("myForm").elements["firstName"];//設(shè)置默認(rèn)值textBox.value = "input your firstName";//設(shè)置事件textBox.addEventListener("select", function () {  console.log("selected");});3、取得選擇的文本
利用兩個屬性:
這兩個屬性保存的是基于0的數(shù)值,表示所選擇文本的范圍(偏移量)。因此要取得用戶選擇的文本框中的文本,可以使用如下代碼:
var textBox = document.getElementById("myForm").elements["firstName"];//設(shè)置默認(rèn)值textBox.value = "input your firstName";//設(shè)置事件textBox.addEventListener("select", function () {  var selected = textBox.value.substring(textBox.selectionStart,textBox.selectionEnd);  console.log(selected); });另外,也可以用該屬性來設(shè)置當(dāng)獲得焦點的時候默認(rèn)全選的狀態(tài):
textBox.addEventListener("focus", function () {  textBox.selectionStart = "0";  textBox.selectionEnd = textBox.value.length;});或者:
textBox.addEventListener("focus", function () {  textBox.blur();});但是,使用selectionStart/End屬性時,IE8不支持,但支持另一個名為
獲取選擇的文本的兼容版本為:
function getSelectedText (textbox) {  if (typeof textbox.selectionStart == "number") {    return textbox.value.substring(textbox.selectionStart,textbox.selectionEnd);  }else if (document.selection) {    return document.selection.createRange().text;  }}二、選擇部分文本
選擇部分文本的方法是:
setSelectionRange()方法。接收兩個參數(shù):要選擇第一個字符的索引和最后一個字符的索引。
如阻止用戶選擇:
textBox.addEventListener("focus", function () {  textBox.setSelectionRange(0,0);});textBox.addEventListener("select", function () {  textBox.setSelectionRange(0,0);});要調(diào)用setSelectionRange()之前或之后立即將焦點設(shè)置到文本框。而IE中使用的方式是適用范圍來解決文本的問題:
var range = textBox.createTextRange();range.collapse(true); //范圍折疊到開頭range.moveStart("Character",0);range.moveEnd("Character",textBox.value.length);range.select();兼容版本:比較常用
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);    range.select();  };}三、過濾輸入
1、屏蔽字符
下面的代碼僅允許輸入數(shù)字:
var textBox = document.getElementById("myForm").elements["firstName"];textBox.autofocus = true;textBox.addEventListener("keypress", function () {  if (!//d/.test(String.fromCharCode(event.charCode))) { //僅輸入數(shù)字    event.preventDefault();  };});但是部分瀏覽器會對向上、下鍵、退格鍵觸發(fā)keypress事件,所以需要對這些常用的操作鍵取消禁止,只要不屏蔽那些字符編碼小于10的鍵即可:
textBox.addEventListener("keypress", function () {  if (!//d/.test(String.fromCharCode(event.charCode)) && event.charCode > 9 && !event.ctrlKey) { //僅輸入數(shù)字    event.preventDefault();  };});四、操作剪貼板
以下是6個剪貼板事件
如設(shè)置禁止拷貝:
//拷貝之前提示禁止拷貝textBox.addEventListener("beforecopy", function() {  textBox.value = "do not copy";});//拷貝時禁止拷貝textBox.addEventListener("copy", function() {  event.preventDefault();});要訪問剪貼板中的數(shù)據(jù),可以使用clipboardData對象,在IE中,這個對象是window對象的屬性,在friefox,safari和chrome,這個對象是相應(yīng)event對象的屬性;在IE中可以隨時訪問該對象;但在其他瀏覽器中只有在處理剪貼板事件期間才有效。
這個clipboardData對象有三個方法:
getData()接收一個參數(shù),即要取得數(shù)據(jù)的格式(IE中有兩種數(shù)據(jù)格式:text和URL;在其他瀏覽器中這個參數(shù)是一種MIME類型;不過可以用text代替text/plain)。
setData()接收兩個參數(shù),即數(shù)據(jù)類型和要放在剪貼板中的文本。(第一個參數(shù)中,IE支持text和URL;第二個參數(shù)中chrome和safari不支持text類型);這兩個瀏覽器在成功將文本放到剪貼板中后,都會返回true;否則,返回false:
function getClipboardText(event) {  var clipboardData = (event.clipboardData || window.clipboardData);  return clipboardData.getData("text");}function setClipboardText(event, value) {  if (event.clipboardData) {    return event.clipboardData.setData("text/plain", value);  } else if (window.clipboardData) {    return window.clipboardData.setData("text", value);  }}目前瀏覽器逐漸收緊對訪問剪貼板的操作。
五、自動切換焦點
理論上就是在前一個文本框中的字符打到最大數(shù)量后,自動將焦點切換到下一個文本框:
DOM:
<form action=""> <input type="text" name="tel11" id="txtTel1" maxLength="3"> <input type="text" name="tel12" id="txtTel2" maxLength="3"> <input type="text" name="tel13" id="txtTel3" maxLength="4"> <input type="submit" name="btn" id="btn" value="submit"></form>
js:
var textbox1 = document.getElementById("txtTel1");var textbox2 = document.getElementById("txtTel2");var textbox3 = document.getElementById("txtTel3");textbox1.addEventListener("keyup", tabForward);textbox2.addEventListener("keyup", tabForward);textbox3.addEventListener("keyup", tabForward);function tabForward() {  var target = event.target;  //當(dāng)value長度等于最大值的時候  if (target.value.length == target.maxLength) {    var form = target.form;    //遍歷所在的form表單中的元素    for (var i = 0, len = form.elements.length; i < len; i++) {      //如果該元素是目標(biāo)元素      if (form.elements[i] == target) {        //并且該元素的下一個元素為true 其他條件        if ((form.elements[i + 1]) && (form.elements[i + 1].nodeType == 1) && (form.elements[i + 1].tagName.toLowerCase() == "input") && (form.elements[i + 1].type == "text")) {          //則下個元素獲得焦點          form.elements[i + 1].focus();        }      }    };  }}六、HTML5約束驗證API
1、必填字段required屬性
在必填字段中添加屬性required。它適用于input,textarea,select字段。使用下面的代碼可以檢測瀏覽器是否支持required屬性:
var isRequiredSupported="required" in document.createElement("input");2、其他輸入類型
input的type屬性增加了“email”和“url”;各瀏覽器也都為它們增加了定制的驗證機制:
var input = document.createElement("input");input.type = "email";var isEmailSupported = (input.type == "email");3、數(shù)值范圍
除了“email”和“URL”,HTML5還定義了另外幾個輸入元素。這幾個元素都要求填寫基于數(shù)字的值:“number”,“range”,“datetime”,“datetime-local”,“date”,“mouth”,“week”,“time”。目前瀏覽器對這些類型支持并不好,如果真想使用的話要小心。
對這事數(shù)值類型的輸入元素可以指定min屬性,max屬性,step屬性。同時這些數(shù)值類型元素還有兩個方法:stepUp(),stepDown()。都接受一個參數(shù),要在當(dāng)前基礎(chǔ)上加上或減去的數(shù)值。
DOM:
<form action=""> <input type="range" name="tel14" id="txtTel4" required min="10" max="20" step="1"> <input type="button" value="up" id="up"> <input type="text" id="output"> <input type="submit" name="btn" id="btn" value="submit"></form>
js:
var input = document.getElementById("txtTel4");var up = document.getElementById("up");input.addEventListener("mousemove", function () {  var output = document.getElementById("output");  output.value = input.value;});up.addEventListener("click", function () {  //點擊value值以2為單位增加  input.stepUp(2);  var output = document.getElementById("output");  output.value = input.value;});3、輸入模式
HTML5新增了pattern屬性,這個屬性的值是一個正則表達(dá)式,用于匹配文本框中的值。
<input type="text" id="number" pattern="/d{3}">var num = document.getElementById("number");console.log(num.pattern); ///d{3}可以使用以下代碼來檢測瀏覽器是否支持pattern屬性:
var isPatternSupported="pattern" in document.createElement("input");4、檢測有效性
使用checkValidity()方法可以檢測表單中的字段是否有效。所有表單的字段都有這個方法,如果檢查有效返回true。
<form action="">  <input type="text" pattern="w" id="name" required>  <input type="number" max="10" id="num" required>  <input type="button" id="check" value="check">  <input type="submit" id="submit" value="submit" disabled></form>var form = document.forms[0];var name = document.getElementById("name");var number = document.getElementById("num");var check = document.getElementById("check");var submit = document.getElementById("submit");check.addEventListener("click", function () {  console.log(form.checkValidity()); //檢測整個表單是否正確  if (form.checkValidity()) {    submit.removeAttribute("disabled");    check.disabled = true;  }else{    alert("請檢查表單");  }});input的validity屬性會給出什么字段有效和無效的具體信息。
var inputName = document.getElementById("inputName");inputName.onblur = function() {  if (inputName.checkValidity()) {    inputName.style.color = "white";    inputName.style.backgroundColor = "green";  } else {    inputName.style.color = "white";    inputName.style.backgroundColor = "red";    if (inputName.validity.patternMismatch) {      inputName.value = "請?zhí)顚懻_的格式";    }  }};inputName.addEventListener("mouseenter", function () {  inputName.focus();  inputName.select();});validity主要包括下列屬性:
5、禁用驗證
通過設(shè)置表單的novalidate屬性,可以是表單不進(jìn)行驗證。用js獲取form之后,設(shè)置它的novalidate屬性為true,會禁用表單驗證。
在提交按鈕上添加formnovalidate屬性,會不驗證提交表單。用js獲取submit按鈕之后,設(shè)置它的formnovalidata屬性為true,會禁用表單驗證并提交。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。
新聞熱點
疑難解答