【表單腳本】文本框腳本

在HTML中塌衰,有兩種方式來表現(xiàn)文本框:

  • 使用<input>元素的單行文本框
  • 使用<textarea>的多行文本框。
<!--
文本框:
    type特性為“text”
    size特性:指定文本框中能顯示的字符數(shù)
    value特性:設置文本框的初始值
    maxlength特性:指定文本框可以接受的最大字符數(shù)
-->
<input text="text" size="25" maxlength="50" value="initial value" />

<!--
多行文本框:
    rows,cols特性:指定文本框的大小见芹,其中rows指定文本框的字符行數(shù)钉嘹,cols指定文本框的字符列數(shù)
    初始值必須放在<textarea></textarea>之間
    不能在HTML中指定最大字符數(shù)
-->
<textarea rows="5" cols="25"></textarea>

這兩種文本框都會將用戶輸入的內(nèi)容保存在value屬性中鸯乃。可以通過這個屬性讀取和設置文本框的值跋涣。

var textbox = document.forms[0].elements["textbox1"];
alert(textbox.value);

textbox.value = "some new value";

選擇文本

1缨睡、這個方法用于選擇文本框中的所有文本。
2陈辱、在調(diào)用select()方法時奖年,大多數(shù)瀏覽器(Opera除外)都會將焦點設置到文本框中。
3沛贪、這個方法不接收參數(shù)陋守,可以在任何時候被調(diào)用。

var textbox = document.forms[0].elements["textbox1"];
textbox.select();

在文本框獲得焦點時選擇其所有文本利赋,特別是在文本框包含默認值的時候水评。這樣做可以染用戶不必一個一個地刪除文本。

EventUtil.addHandler(textbox,"focus",function(event){
    event = EventUtil.getEvent(event);
    var target = EventUtil.getTarget(event);

    target.select();
});

選擇(select)事件

  • 在選擇了文本框中的文本時媚送,就會觸發(fā)select事件中燥。
  • 在調(diào)用select()方法時也會觸發(fā)select事件。
var textbox = document.forms[0].elements["textbox1"];
EventUtil.addHandler(textbox,"select",function(event){
    alert("Text selected:"+textbox.value);
});

取得選擇的文本

通過select事件我們可以知道用戶什么時候選擇了文本塘偎,但是不知道用戶選擇了什么文本褪那。HTML5 通過一些擴展方案解決了這個問題幽纷,以便更順利的取得選擇的文本。

該規(guī)范采取的辦法:添加兩個屬性博敬,selectionStart和selectionEnd友浸。這兩個屬性中保存的是基于0的數(shù)值,表示所選擇文本的范圍(即文本選區(qū)開頭和結(jié)尾的偏移量)偏窝。

//取得用戶在文本框中選擇的文本
//IE9+收恢、Firefox、Safari祭往、Chrome和Opera支持這兩個屬性伦意。
function getSelectedText(textbox){
    return textbox.value.substring(textbox.selectionStart,textbox.selectionEnd);
}

IE8 及更早版本中有一個document.selection對象,其中保存著用戶在整個文檔范圍內(nèi)選擇的文本信息硼补。也就是說驮肉,無法確定用戶選擇的是頁面中哪個部位的文本。不過已骇,在與select事件一起使用的時候离钝,可以假定是用戶選擇了文本框中的文本,因而觸發(fā)了該事件褪储。要取得選擇的文本卵渴,首先必須要創(chuàng)建一個范圍,然后再講文本從中提取出來鲤竹。

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()方法浪读。
param:param1——要選擇的第一個字符的索引
param2——要選擇的最后一個字符之后的字符的索引

//IE9+、Firefox辛藻、Safari碘橘、Chrome和Opera支持這種方案。
textbox.value = "hello world";

//選擇所有文本
textbox.setSelectionRange(0,textbox.value.length);  //hello world

//選擇前3個字符
textbox.setSelectionRange(0,3);  //hel

//選擇第4到第6個字符
textbox.setSelectionRange(4,7);  //o w

IE8 及更早的版本支持使用范圍選擇部分文本吱肌。
要選擇的文本框中的部分文本:

  1. 首先使用createTextRange()方法創(chuàng)建一個范圍痘拆,并將其放在恰當?shù)奈恢蒙稀?/li>
  2. 使用collapse()將范圍折疊到文本框的開始位置。
  3. 再使用moveStart()和moveEnd()這兩個范圍方法將范圍移動到位岩榆。此時,moveStart()將范圍的起點和終點移動到了相同的位置坟瓢,只要給moveEnd()傳入要選擇的字符總數(shù)即可勇边。
  4. 最后,使用范圍的select()方法選擇文本折联。
textbox.value = "Hello world!";
var range = textbox.createTextRange();
//選擇所有文本
range.collapse(true);
range.moveStart("character", 0);
range.moveEnd("character", textbox.value.length);  //"Hello world"
range.select();  //"Hello world!"
//選擇前3個字符
range.collapse(true);
range.moveStart("character", 0);
range.moveEnd("character", 3);
range.select();  //"Hel"
//選擇第4個到第6個字符
range.collapse(true);
range.moveStart("character", 4);
range.moveEnd("character", 3);
range.select();  //"o w"

為了跨瀏覽器編程粒褒,可以將上述兩種方案組合起來。

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();
}
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末诚镰,一起剝皮案震驚了整個濱河市奕坟,隨后出現(xiàn)的幾起案子祥款,更是在濱河造成了極大的恐慌,老刑警劉巖月杉,帶你破解...
    沈念sama閱讀 212,222評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刃跛,死亡現(xiàn)場離奇詭異,居然都是意外死亡苛萎,警方通過查閱死者的電腦和手機桨昙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腌歉,“玉大人蛙酪,你說我怎么就攤上這事∏谈牵” “怎么了桂塞?”我有些...
    開封第一講書人閱讀 157,720評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長馍驯。 經(jīng)常有香客問我阁危,道長,這世上最難降的妖魔是什么泥彤? 我笑而不...
    開封第一講書人閱讀 56,568評論 1 284
  • 正文 為了忘掉前任欲芹,我火速辦了婚禮,結(jié)果婚禮上吟吝,老公的妹妹穿的比我還像新娘菱父。我一直安慰自己,他們只是感情好剑逃,可當我...
    茶點故事閱讀 65,696評論 6 386
  • 文/花漫 我一把揭開白布浙宜。 她就那樣靜靜地躺著,像睡著了一般蛹磺。 火紅的嫁衣襯著肌膚如雪粟瞬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,879評論 1 290
  • 那天萤捆,我揣著相機與錄音裙品,去河邊找鬼。 笑死俗或,一個胖子當著我的面吹牛市怎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播辛慰,決...
    沈念sama閱讀 39,028評論 3 409
  • 文/蒼蘭香墨 我猛地睜開眼区匠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了帅腌?” 一聲冷哼從身側(cè)響起驰弄,我...
    開封第一講書人閱讀 37,773評論 0 268
  • 序言:老撾萬榮一對情侶失蹤麻汰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后戚篙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體五鲫,經(jīng)...
    沈念sama閱讀 44,220評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,550評論 2 327
  • 正文 我和宋清朗相戀三年已球,在試婚紗的時候發(fā)現(xiàn)自己被綠了臣镣。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,697評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡智亮,死狀恐怖忆某,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情阔蛉,我是刑警寧澤弃舒,帶...
    沈念sama閱讀 34,360評論 4 332
  • 正文 年R本政府宣布,位于F島的核電站状原,受9級特大地震影響聋呢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜颠区,卻給世界環(huán)境...
    茶點故事閱讀 40,002評論 3 315
  • 文/蒙蒙 一削锰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧毕莱,春花似錦器贩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,782評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至部服,卻和暖如春唆姐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背廓八。 一陣腳步聲響...
    開封第一講書人閱讀 32,010評論 1 266
  • 我被黑心中介騙來泰國打工奉芦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人剧蹂。 一個月前我還...
    沈念sama閱讀 46,433評論 2 360
  • 正文 我出身青樓声功,卻偏偏與公主長得像,于是被迫代替她去往敵國和親国夜。 傳聞我的和親對象是個殘疾皇子减噪,可洞房花燭夜當晚...
    茶點故事閱讀 43,587評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 表單基礎知識 在HTML中短绸,表單是由 元素來表示的车吹,而在JS中筹裕,表單對應的則是HTMLFormElement類型。...
    oWSQo閱讀 906評論 0 1
  • 1窄驹、窗體 1朝卒、常用屬性 (1)Name屬性:用來獲取或設置窗體的名稱,在應用程序中可通過Name屬性來引用窗體乐埠。 ...
    Moment__格調(diào)閱讀 4,529評論 0 11
  • 1. Java基礎部分 基礎部分的順序:基本語法抗斤,類相關的語法,內(nèi)部類的語法丈咐,繼承相關的語法瑞眼,異常的語法,線程的語...
    子非魚_t_閱讀 31,598評論 18 399
  • 這么熱的天棵逊,火車站里一點涼氣也沒有伤疙,連云港最近幾年的經(jīng)濟衰退已經(jīng)這么嚴重了嗎,怪不得家里人常說空調(diào)買的起用不起辆影,...
    乖乖乖怪閱讀 204評論 0 0
  • 這是一部清澀的小說徒像,它記錄了那些年,我的那些故事...... 那年青春未散
    蕭娜閱讀 158評論 1 2