使用状态模式控制 输入内容自动跳转到相应正则表达式文本框
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
$("#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"); }