javascript 文本框_js文本框_Elna_99的博客-程序员秘密

技术标签: JavaScript  javascript  

HTML,有两种方式表示文本框:一种是用<input>标签,其type设置为text这种设出来使单行文本框,另一种是多行文本框,使用<textarea>他们之间有一些重要的区别。

<input>标签:通过设置size特性,能够指定显示的字符数通过value特性,可以设置初始值;maxlength能够设置能够显示的最大字符数;

<textarea>通过设置rows,cols特性可以设置行列;与<input>标签不同,<textarea>的初始值不是在特性里设置的,而是由<textarea>标签包围;而且,不能<textarea>设置最大字符数。

 

素,他们之间还是有一个共同点的!他们都会将用户输入的value保存在value属性通过元素的value属性,可以访问修改value

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

alert(textbox1.value);

textbox1.value="some new text";

 

建议使用上面的方法设置和修改value值,不建议使用DOM方法,即不要用setAttribute()方法设置<textarea>特性,也不要修改<textarea>第一个子节点。

一、 选择文本select()

上面两种文本框都支持select()方法,这个方法会选择文本框中所有的文本调用select(),大多数浏览器都会将焦点设置到文本框中(欧朋)文本框获得焦点时,选择所有文本,文本框中默认值时,避免了用户一个一个地删除,提升表单的易用性。

EventUtil.addHandler(btn,”focus”,function(evnet){

event=EventUtil.getEvent(event);

var target=EventUtil.getTarget(event);

target.select();

});

二、 选择事件(select

select方法对应的,有一个select事件,该方法发生在两种情况下:文本中的文本被选择时和调用select()方法时。然而触发事件的时刻却因浏览器而异。IE及更早的版本只要用户选择了一个字符,(不必释放鼠标)就会触发select事件IE9+,Opera,FF,Safari浏览器只有用户选择了文本(并且释放鼠标),才会触发select事件

var textarea=document.forms[0].elements["textarea"];

EventUtil.addHandler(textarea,"select",function(event){

alert("Textarea Value"+textarea.value);

});

三、 取得选择的文本(所有的文本

HTML5添加了两个属性:selectionStart,selectionEnd用以表示所选择文本的范围,两个属性有IE9+,ff,Safari,Chrome,Opera支持IE8以前版本就使用document.selection对象,保存着用户选择的文本信息,取得选择的文本必须先创建一个范围,再将文本从范围中提取出来。

跨浏览器取得选择的文本,可以用以下的代码:

function getSelectedText(textbox){

if(typeof textbox.selectionStart=="number"){

return textbox.value.substring(textbox.selectionStart,textbox.selectionEnd);

}else if(document.getSelection){

return document.selection.createRange().text;

}

}

四、 选择文本(部分文本)

HTML5提供了选择部分文本的方法:setSelectionRange(),传入两个参数,一个是要选择的第一个字符的索引,一个是要选择的最后一个文本的下一个字符的索引。

textbox.value="hello world!";

textbox.setSelectionRange(0,textbox.value.length);//"hello world!"

textbox.setSelectionRange(0,3);//"hel"

textbox.selectionRange(4,7);//"o w"

 

IE8更早版本支持使用范围选择部分文本。必须提供createTextRange方法创建一个范围,再collapse()方法将范围折叠文本框的开始位置,接着moveStart()将起点终点移到了相同位置,然后moveEnd()传入要显示的字符总数,最后select()选择文本。当然,最重要的一步,让文本框获得焦点,在文本框中才能看到文本被选择的效果

textbox.value="hello world!";

var range=textbox.createTextRange();

range.collapse();

range.moveStart("character",4);

range.moveEnd("character",3);

range.select();//”o w"

跨浏览器选择部分文本:

function selectText(textbox,startIndex,endIndex){

if(textbox.setSelectionRange){

textbox.setSelectionRange(textbox,startIndex,endIndex);

}else if(textbox.createTextRange){

var range=textbox.createTextRange;

range.collapse(true)

range.moveStart("character",startIndex);

range.moveEnd("charcter",endIndex-startIndex);

range.select();

}

textbox.focus();

}

五、过滤输入(输入的文本包含或不包含某些字符)

有些情况下,我们对用户输入的文本有所要求,例如电话号码只能是数字。在极端的情况下利用下面的代码可以屏蔽所有按键操作,从而把文本设置成只读模式。

EventUtil.addHandler(

textbox,"keypress",function(event){

event=EventUtil.getEvent(event);

EventUtil.preventDefault(event);

}

);

进一步地,如果是像电话号码那样只想屏蔽特定的字符,则可以检测keypress事件对应的字符编码,然后再决定如何响应。

EventUtil.addhandler(

textbox,"keypress",function(event){

event=EventUtil.getEvent(event);

var charCode=EventUtil.getCharCode(event);

if(!/\d/.test(String.fromCharCode(charCode))){

EventUtil.preventDefault();

}

}

);

事情并咩有这么简单,有些浏览器对于非字符键也会触发keypress事件,像FFSafari3.1版本以前)对向上键,向下键,会触发keypress键,那么怎么解决呢?

FF中,所有由非字符键触发的keypress事件,对应字符编码均为0,在Safari3以前的版本均为8。因此要屏蔽这些键,就要求字符编码不是这两个数字,为了让代码更为通用,可以设置为字符编码不超过10,修改如下:

EventUtil.addhandler(

textbox,"keypress",function(event){

event=EventUtil.getEvent(event);

var charCode=EventUtil.getCharCode(event);

if(!/\d/.test(String.fromCharCode(charCode))&&charCode>9){

EventUtil.preventDefault();

}

}

);

这样还不够!如果用户要复制黏贴文本到文本框,要用到ctrl键,上面的代码的无疑已经屏蔽了ctrl键!因此,还要添加一个检测条件,确保用户没有按下ctrl键。

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();

}

}

);

至此,检测包含非数字字符的三个条件都齐全了!

六、操作剪贴板(Opera不支持)

 

我们仔细讲解下如何访问剪贴板中的数据。

要访问剪贴板中的数据,可以访问clipboardData对象。IE中,这个对象是wiondow的,在Safari,FF,Chrome中,这个对象是event对象的属性。

这个对象有三个方法:getData(),setData(),clearData()

IE中,getData()有两种格式,”text”和”url”;FF,Safari,Chrome中,这个参数是一种MIME类型,只有text/plain(可以用text代替)。

setData()有两个参数,一个是数据类型,一个是值。IE照样是texturl,其他的浏览器是text/plain。但是!SafariChromesetData()不支持text,只能用text/plain!也就是说,getData()方法可以统一为text,getData()一定要按浏览器差异分开来编写代码!

var EventUtil={

//省略代码

getClipboardText:function(event){

var clipboardData=(event.clipboardData||window.clipboardData);

return clipboardData.getData("text");

},

setClipboardText:function(event,value){

if(event.clipboardData){

return event.clipboardData.setData("text/plain",value);

}else if(window.clipboardData){

return window.clipboardData.setData("text",value);

}

},

//省略代码

}

与剪贴板相关的事件其实有六个,HTML5后来把他们列入了规范。

Beforecopy,beforecut,,beforepaste,paste,copy,cut

由于没有针对操作剪贴板的标准,这些事件及相关对象因浏览器而异。这里就不仔细讲了。

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/elna_99/article/details/52862743

智能推荐

mybatis-generator的简单使用_jiaxuch的博客-程序员秘密

相关准备mybatis-generator官网地址:http://mybatis.org/generator/mybatis官网地址:https://mybatis.org/mybatis-3/mybatis-generator-plugin插件地址:https://github.com/itfsw/mybatis-generator-plugin(这是 MyBatis Generator 插件的拓展插件包)目录结构pom.xml主要给maven增加插件,用于代码生成,增加后效果如下:

atiptaxx.exe_taxocr软件_ProcessInfo的博客-程序员秘密

  进程知识库 atiptaxx - atiptaxx.exe - 进程信息进程文件: atiptaxx 或者 atiptaxx.exe进程名称: ATI Utilitiy  描述:ATIPtaxx.exe是ATI显示卡驱动的一部分,在系统托盘有显示。 出品者: ATI Technol

STM32学习(1)-资料查找,STM32简介,STM32选型以及芯片内部结构图_在于探索的博客-程序员秘密

一.学习网站开源电子网:http://www.openedv.com/forum.phpST官方社区:https://www.stmcu.org.cn/二.资料查找1.芯片手册中文芯片数据手册:英文芯片数据手册2.如何查找哪些引脚兼容5V3.如何选择外设I/O3.1 ADC引脚首先查找具有ADC标志的引脚,然后在观看这个引脚是否完全浮空,是否完全独立。3.2 PWM一般查找是定时器通道的引脚 TIMx_CHX x为1-8 ,X为1-44.如何分配I/O可以查看

微信之父张小龙:怎样做简单的产品经理? 一_简单的产品 微信_hudan2714的博客-程序员秘密

故事就讲到这里,我们开始今天的正题,先用简单的思维开始。这句话大家都听了很多——“少就是多”,为什么少就是多?为什么简单就是美?为什么复杂就不美了?微信我相信男生都用了,女生用了也不会告诉我们。我摇到了一个叫Tina的,在三公里以外,如果大家想加我的话可以一起摇一下。(演示微信摇一摇功 能,编者注)但是深圳的同事,你们在100公里以外就加不到我了。1、2、3,摇!必须在3秒之内摇,然后我们

C#编程总结(五)多线程带给我们的一些思考_weixin_34391854的博客-程序员秘密

C#编程总结(五)多线程带给我们的一些思考如有不妥之处,欢迎批评指正。1、什么时候使用多线程?     这个问题,对于系统架构师、设计者、程序员,都是首先要面对的一个问题。     在什么时候使用多线程技术?     在许多常见的情况下,可以使用多线程处理来显著提高应用程序的响应能力和可用性。     上一章,我们讲了几个多线程的应用案例,主要的应用场景也做了介绍。这里不再...

随便推点

windows安装PKG-CONFIG_windows pkgconfig_Ficery的博客-程序员秘密

下载win-build链接http://win-builds.org/doku.php/download_and_installation_from_windows下载pkg-config链接: https://pan.baidu.com/s/1Y47Bb4imHyYRNEeO1frTXA 提取码: m854将下载的PKG-CONFIG解压,解压的bin与MinGW-w64里的的bin目录合并。将libglib-2.0-0.dll复制到 MinGW-w64里bin目录下。...

Android学习笔记(三)-第一个Android应用HelloWorld_iteye_3224的博客-程序员秘密

下面,让我们开始创建Android的第一个简单应用吧!首先点击Eclipse左上角的新建图标,选择Android包下面的Android Project,点击Next在下一个界面设置好相应的值后,点击Finish完成创建项目建立完成后,各个目录功能如下所示:src/java原代码存放目录gen/自动生成目录gen目录中存放所有由Android开发工具自动生成的...

spark log4j.properties配置详解与实例_qq_21355765的博客-程序员秘密

################################################################################ #①配置根Logger,其语法为: # #log4j.rootLogger = [level],appenderName,appenderName2,... #level是日志记录的优先级,分为OFF,TRACE,DEBU

百度console输出_dengzi7665的博客-程序员秘密

1 try{ 2 if(window.console&amp;&amp;window.console.log) 3 { 4 console.log("一张网页,要经历怎样的过程,才能抵达用户面前?\n一位新人,要经历怎样的成长,才能站在技术之巅?\n探寻这里的秘密;\n体验这里的挑战;\n成为这里的主人;\n加入百度,...

mac brew常用命令总结【安装、启动、重启,查看运行进程】_brew start_weixin_43343144的博客-程序员秘密

brew最核心的一些命令# 安装最新版本brew install mysql# 安装制定版本brew install [email protected]# 启动 mysql, 并设置为开机启动brew services start mysql# 关闭 mysqlbrew services stop mysql# 重启 mysqlbrew services restart mysql# 查看服务器【等价于launchRocket小软件】brew services list# 查看已安装.

Xbanner,支持画廊效果_安卓banner画廊效果_Mr_ziheng的博客-程序员秘密

在工程的build.gradle中 allprojects { repositories { google() jcenter() maven { url 'https://jitpack.io' } } }在项目的build.gradleimplementation &quot;com.daimajia.swipelayout:li...

推荐文章

热门文章

相关标签