有两种文本框:
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小时内与您取得联系。