使用状态模式控制 输入内容自动跳转到相应正则表达式文本框

$("#check_status").bind('click', function ()
{
if ($("#check_status").attr("checked") == true)
{
ChangeState();

} else {
ChangeState();
}
});
var state = "off";
function ChangeState()
{
if (state == "on")
{ 
EasyInputOn();//開啟
this.state = "off";
//alert(state);
}
else
{
EasyInputOff();//關閉
this.state = "on";
//alert(state);
}
};


$(function EasyInputOn() {
SetOnKeyUp();
});

function EasyInputOn() {
SetOnKeyUp();
};
function EasyInputOff() {
RelieveKeyUp();
}
//增加EventHandler,
function addEventHandler(oNode, sEvt, fFunc, bCapture) {

//if (typeof (window.event) != "undefined")
// oNode.attachEvent("on" + sEvt, fFunc);
// 
//else
oNode.addEventListener(sEvt, fFunc, bCapture);
}
//刪除EventHandler,
function removeEventHandler(oNode, sEvt, fFunc, bCapture) {

//if (typeof (window.event) != "undefined")
// //oNode.detachEvent("on" + sEvt, fFunc);
//else
oNode.removeEventListener(sEvt, fFunc, bCapture);
}
//為了能夠添加事件,對函數處理使得能夠傳遞參數
function bind(obj, handler) {
obj = obj || window;
var args = [];
for (var i = 2; i < arguments.length; i++) {
args.push(arguments[i]);
}
return function () { handler.apply(obj, args) };
};
//為所有文本框綁定keyup事件
function SetOnKeyUp() {
__handleDic = new Array();
var inputs = document.getElementsByTagName("input");//取所有文本框
for (var i = 0; i < inputs.length; i++) {
if (inputs[i].getAttribute("isEasyInput") == null) continue;//只有有此屬性的文本框才掛上
//inputs[i].onclick = function() { alert('Hello!World'); };

inputs[i].isEqualNode
//inputs[i].onkeyup = function () { test(el); }; //可行,但是參數有問題。且這種方法會覆蓋掉DOM本身的事件
var mothe = bind(inputs[i], DomKeyUpEvent, inputs[i]);
addEventHandler(inputs[i], "keyup", mothe);//優先級是DOM本身的事件才到這些綁定的事件
// addEventHandler(inputs[i], "keyup", function (d) { test(d+1); }, false);
// addEventHandler(inputs[i], "keyup", function (d) { test(d+2); }, false);

__handleDic[inputs[i].id] = mothe;
}
}
//為所有文本框取消綁定的keyup事件
function RelieveKeyUp() {

//alert(__handleDic.length);//就算有值也是0
for (var key in __handleDic) {
var o = document.getElementById(key);
//o.removeEventListener("keyup", __handleDic[key]);

removeEventHandler(o, "keyup", __handleDic[key], false);
}
}
//DOM觸發事件
function DomKeyUpEvent(arg) {
//判斷是不是需要智能輸入的對象
//if (arg.getAttribute("isEasyInput") == null) {
// alert("不是支持對象");
// return;
//}
//alert(arg);
Judge(arg)
}
//匹配判斷組件
function Judge(arg) {

var inputs = document.getElementsByTagName("input");//取所有文本框
//alert("文本框的數量" + inputs.length)
for (var i = 0; i < inputs.length; i++) {
if (inputs[i].getAttribute("isEasyInput") == null) continue;
else if (inputs[i].getAttribute("regex") == null) continue;
else {
var souStr = arg.value;
//alert(souStr);
var regex = inputs[i].getAttribute("regex");
//alert(regex);
//var testresult = "78".search("\d{3}");
//alert(testresult);
var result = souStr.search(regex);//返回結果 0 是匹配,-1是不匹配
//alert(result);
if (result == 0) {
MessageTransmit(arg, inputs[i])
return;
}
//alert("這一個");
}
//alert(inputs[i].id);
}
}
//消息轉發組件
function MessageTransmit(source, taget) {
var message = source.value;
source.value = "";
taget.value = message;
//alert("OK");
}
View Code
原文地址:https://www.cnblogs.com/YzpJason/p/7217068.html