前端基础笔记

【javascript】文本框脚本和选择框脚本

2017-12-19  本文已影响1人  shanruopeng

文本框脚本

<input type="text" size="25" maxlength="50" value="initial value">
<textarea rows="25" cols="5">initial value</textarea>
var textbox = document.forms[0].elements["textbox1"];
alert(textbox.value);
textbox.value = "Some new value";
//事件处理程序,方便后面使用
var EventUtil = {
    addHandler: function(element, type, handler){
        if (element.addEventListener){
            element.addEventListener(type, handler, false);
        } else if (element.attachEvent){
            element.attachEvent("on" + type, handler);
        } else {
            element["on" + type] = handler;
        }
    },
    getEvent: function(event){
        return event ? event : window.event;
    },
    getTarget: function(event){
        return event.target || event.srcElement;
    },
    getCharCode: function(event){
        if (typeof event.charCode == "number"){
            return event.charCode;
        } else {
            return event.keyCode;
        }
    },
    preventDefault: function(event){
        if (event.preventDefault){
            event.preventDefault();
        } else {
            event.returnValue = false;
        }
    }
    removeHandler: function(element, type, handler){
        if (element.removeEventListener){
            element.removeEventListener(type, handler, false);
        } else if (element.detachEvent){
            element.detachEvent("on" + type, handler);
        } else {
            element["on" + type] = null;
        }
    }
};

1、选择文本

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

(1)选择select事件

var textbox = document.forms[0].elements["textbox1"];
EventUtil.addHandler(textbox, "select", function(event){
    var alert("Text selected" + textbox.value);
});

(2)取得选择的文本

//取得用户在文本框中选择的文本
function getSelectedText(textbox){
    return textbox.value.substring(textbox.selectionStart, textbox.selectionEnd);
}

//兼容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;
    }
}

(3)选择部分文本

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"
//实现跨浏览器编程,兼容IE
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();
}

textbox.value = "Hello world!"

//选择所有文本
selectText(textbox, 0, textbox.value.length); //"Hello world!"

//选择前3 个字符
selectText(textbox, 0, 3); //"Hel"

//选择第4 到第6 个字符
selectText(textbox, 4, 7); //"o w"

2、过滤输入

(1)屏蔽字符

//只允许用户输入数值,并确保用户没有按下Ctrl键
EventUtil.addHandler(textbox, "keypress", function(event){
    event = EventUtil.getEvent(event);
    var target = EventUtil.getTarget(event);
    var charCode = EventUtil.getCharCode(event);
    if (!/\d/.test(String.fromCharCode(charCode)
        && charCode > 9 
        &&!event.ctrlKey)){
        EventUtil.preventDefault(event);
    }
});

(2)操作剪切板

事件名 含义
beforecopy 在发生复制操作前触发
copy 在发生复制操作时触发
beforecut 在发生剪切操作时触发
cut 在发生剪切操作时触发
beforepaste 在发生粘贴操作前触发
paste 在发生粘贴时触发
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);
        }
    },
    //省略的代码
};
EventUtil.addHandler(textbox, "paste", function(event){
    event = EventUtil.getEvent(event);
    var text = EventUtil.getClipboardText(event);
    if (!/^\d*$/.test(text)){
        EventUtil.preventDefault(event);
    }
});

3、自动切换焦点

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

4、HTML5 约束验证API

(1)必填字段

<input type="text" name="username" required>
//测试浏览器是否支持required 属性。
var isRequiredSupported = "required" in document.createElement("input");

//检查字段是否为必填字段
var isUsernameRequired = document.forms[0].elements["username"].required;

(2)其它输入类型

<input type="email" name ="email">
<input type="url" name="homepage">

(3)数值范围

<input type="number" min="0" max="100" step="5" name="count">

(4)输入模式

<input type="text" pattern="\d+" name="count">
//访问模式
var pattern = document.forms[0].elements["count"].pattern;

//检测浏览器是否支持pattern 属性。
var isPatternSupported = "pattern" in document.createElement("input");

(5)检测有效性

if (document.forms[0].elements[0].checkValidity()){
    //字段有效,继续
} else {
    //字段无效
}
if(document.forms[0].checkValidity()){
    //表单有效,继续
} else {
    //表单无效
}
属性名 含义
customRrror 如果设置了setCustomValidity(),则返回true,否则返回false
patternMismatch 如果值与指定的pattern 属性不匹配,返回true
rangeOverflow 如果值比max 值大,返回true
rangeUnderflow 如果值比min 值小,返回true
stepMisMatch 如果min 和max 之间的步长值不合理,返回true
tooLong 如果值的长度超过了maxlength 属性指定的长度,返回true
typeMismatch 如果值不是"mail"或"url"要求的格式,返回true
valid 如果这里的其他属性都是false,返回true
valueMissing 如果标注为required 的字段中没有值,返回true
if (input.validity && !input.validity.valid){
    if (input.validity.valueMissing){
        alert("Please specify a value.")
    } else if (input.validity.typeMismatch){
        alert("Please enter an email address.");
    } else {
        alert("Value is invalid.");
    }
}

(6)禁用验证

<form method="post" action="signup.php" novalidate>
    <!--这里插入表单元素-->
</form>
document.forms[0].noValidate = true; //禁用验证
<form method="post" action="foo.php">
    <!--这里插入表单元素-->
    <input type="submit" value="Regular Submit">
    <input type="submit" formnovalidate name="btnNoValidate"
    value="Non-validating Submit">
</form>
//禁用验证
document.forms[0].elements["btnNoValidate"].formNoValidate = true;

选择框脚本

属性/方法 含义
add(newOption, relOption) 向控件中插入新<option>元素,其位置在相关项(relOption)之前
multiple 布尔值,表示是否允许多项选择
options 控件中所有<option>元素的HTMLCollection
remove(index) 移除给定位置的选项
selectedIndex 基于0 的选中项的索引,如果没有选中项,则值为-1
size 选择框中可见的行数
value 未选中,为空
  选中一项,html定义value属性,则为value的值
  选择一项,html未定义value属性,则为该项的文本
  有多个选中项,将依据前两条规则取得第一个选中项的值
属性名 含义
index 当前选项在options 集合中的索引。
label 当前选项的标签
selected 布尔值,表示当前选项是否被选中
text 选项的文本
value 选项的值
var selectbox = document.forms[0].elements["location"];

//不推荐,效率低
var text = selectbox.options[0].firstChild.nodeValue; //选项的文本
var value = selectbox.options[0].getAttribute("value"); //选项的值

//推荐
var text = selectbox.options[0].text; //选项的文本
var value = selectbox.options[0].value; //选项的值

1、选择选项

var selectedOption = selectbox.options[selectbox.selectedIndex];
selectbox.options[0].selected = true;
function getSelectedOptions(selectbox){
    var result = new Array();
    var option = null;
    for (var i=0, len=selectbox.options.length; i < len; i++){
        option = selectbox.options[i];
        if (option.selected){
            result.push(option);
        }
    }
    return result;
}

2、添加选项

//第一种,使用DOM 方法
var newOption = document.createElement("option");
newOption.appendChild(document.createTextNode("Option text"));
newOption.setAttribute("value", "Option value");
selectbox.appendChild(newOption);

//第二种,使用Option 构造函数来创建新选项
var newOption = new Option("Option text", "Option value");
selectbox.appendChild(newOption); //在IE8 及之前版本中有问题

//第三种,使用选择框的add()方法,在列表的最后添加一个选项
var newOption = new Option("Option text", "Option value");
selectbox.add(newOption, undefined); //最佳方案

3、移除选项

//第一种,使用DOM 的removeChild()方法
selectbox.removeChild(selectbox.options[0]); //移除第一个选项

//第二种,使用选择框的remove()方法
selectbox.remove(0); //移除第一个选项

//将相应选项设置为null
selectbox.options[0] = null; //移除第一个选项
function clearSelectbox(selectbox){
    for(var i=0, len=selectbox.options.length; i < len; i++){
        selectbox.remove(i);
    }
}

4、移动和重排选项

//selLocations1中减少一项,成为selLocations2的最后一项
var selectbox1 = document.getElementById("selLocations1");
var selectbox2 = document.getElementById("selLocations2");
selectbox2.appendChild(selectbox1.options[0]);
//在选择框中向前移动一个选项的位置
var optionToMove = selectbox.options[1];
selectbox.insertBefore(optionToMove, selectbox.options[optionToMove.index-1]);
好好学习
上一篇下一篇

猜你喜欢

热点阅读