📄 form.js
字号:
var handler=null;var self=this;if(md[1]=='Display'){handler=function(){var tmp=func();Zapatec.Form.Utils.toggleFormElements(field,tmp,false);if(field.zpFormField){Zapatec.Form.Utils.toggleFormElements(field.zpFormField.errorText,tmp,false);Zapatec.Form.Utils.toggleFormElements(field.zpFormField.requiredMark,tmp,false);}if(field.zpMultipleButton){Zapatec.Form.Utils.toggleFormElements(field.zpFormField.requiredMark,tmp,false);}if(self.config.strict){self.toggleSubmits(self.validate()!=null);}};}else if(md[1]=='Visible'){handler=function(){var tmp=func();Zapatec.Form.Utils.toggleFormElements(field,tmp,true);if(field.zpFormField){Zapatec.Form.Utils.toggleFormElements(field.zpFormField.errorText,tmp,true);Zapatec.Form.Utils.toggleFormElements(field.zpFormField.requiredMark,tmp,true);}if(field.zpMultipleButton){Zapatec.Form.Utils.toggleFormElements(field.zpFormField.requiredMark,tmp,true);}if(self.config.strict){self.toggleSubmits(self.validate()!=null);}};}handler();var eventTypes=this.config.conditionalEvents;if(!eventTypes||eventTypes.length==0){eventTypes=["all"];}for(var ii=0;ii<eventTypes.length;ii++){this.addEventListener(eventTypes[ii],handler);}}};Zapatec.Form.prototype.addEvent=Zapatec.Form.prototype.addChangeHandler=function(func,eventTypes){if(typeof(func)=='string'){func=eval(func);}if(typeof(func)!='function'){return false;}if(!eventTypes||eventTypes.length==0){eventTypes=["all"];}if(typeof(eventTypes)=='string'){eventTypes=[eventTypes];}for(var ii=0;ii<eventTypes.length;ii++){this.addEventListener(eventTypes[ii],func);}func(null,"addEvent");if(this.config.strict){this.toggleSubmits(this.validate()!=null);}return true;};Zapatec.Form.prototype.runChangeHandlers=function(){this.fireEvent("all",null,"runChangeHandlers");};Zapatec.Form.prototype.formLoaded=function(){for(var ii=0;ii<this.container.elements.length;ii++){var zpField=this.container.elements[ii].zpFormField;if(zpField!=null){zpField.setValueFromField(true);}}this.fireEvent("formLoaded");this.fireEvent("all",null,"formLoaded");};Zapatec.Form.prototype.destroy=function(){for(var ii=0;ii<this.container.elements.length;ii++){var field=this.container.elements[ii];if(field.zpFormField){field.zpFormField.destroy();}}this.discard();};Zapatec.Form.setupAll=function(params){var forms=document.getElementsByTagName('form');if(!params){params={};}if(!params.startupFocusPosition){params.startupFocusPosition=null;}if(forms&&forms.length){for(var ff=forms.length-1;ff>=0;ff--){if(forms[ff].zpForm){continue;}var arrMatch=forms[ff].className.match(/zpForm(\S*)/);if(arrMatch){var strThemeName=arrMatch[1];var objConfig=Zapatec.Utils.clone(params);if((objConfig.theme==null||objConfig.theme=="")&&strThemeName){objConfig.theme=strThemeName;}objConfig.form=forms[ff];new Zapatec.Form(objConfig);}}}};Zapatec.Form.submitErrorFunc=function(objErrors){var message=objErrors.generalError+'\n';if(objErrors.fieldErrors&&objErrors.fieldErrors.length){for(var ii=0;ii<objErrors.fieldErrors.length;ii++){message+=(ii+1)+': Field '+objErrors.fieldErrors[ii].field.name+' '+objErrors.fieldErrors[ii].errorMessage+"\n";}message=message.substr(0,message.length-1);}alert(message);};Zapatec.Form.IGNORE_CLASSNAME="zpFormInternalEl";Zapatec.Form.Field=function(objArgs){Zapatec.Form.SUPERconstructor.call(this,objArgs);};Zapatec.Form.Field.id="Zapatec.Form.Field";Zapatec.inherit(Zapatec.Form.Field,Zapatec.Widget);Zapatec.Form.Field.prototype.configure=function(objArgs){this.defineConfigOption('theme',objArgs.formConfig&&objArgs.formConfig.theme?objArgs.formConfig.theme:"");this.defineConfigOption('themePath',objArgs.formConfig&&objArgs.formConfig.themePath?objArgs.formConfig.themePath:Zapatec.Form.path+"../themes/");if(!objArgs.lang&&objArgs.formConfig.lang){objArgs.lang=objArgs.formConfig.lang;}if(!objArgs.langCountryCode&&objArgs.formConfig.langCountryCode){objArgs.langCountryCode=objArgs.formConfig.langCountryCode;}if(!objArgs.langEncoding&&objArgs.formConfig.langEncoding){objArgs.langEncoding=objArgs.formConfig.langEncoding;}this.defineConfigOption('form');this.defineConfigOption('formConfig',{});this.defineConfigOption('field');this.defineConfigOption('langId',"Zapatec.Form");Zapatec.Form.SUPERclass.configure.call(this,objArgs);this.config.form=Zapatec.Widget.getElementById(this.config.form);this.config.field=Zapatec.Widget.getElementById(this.config.field);};Zapatec.Form.Field.prototype.reconfigure=function(objArgs){Zapatec.Form.SUPERclass.reconfigure.call(this,objArgs);};Zapatec.Form.Field.prototype.init=function(objArgs){if(Zapatec.Form.Utils.ignoreField(objArgs.field)||objArgs.field.zpFormField){return null;}this.autoCompleteOptions=[];this.form=null;this.state={};this.features={};this.keyPressCounter=0;this.firstRun=true;this.chars=null;this.enteredValue=null;this.dropDown=null;this.isBooleanField=false;this.isEditing=false;Zapatec.Form.SUPERclass.init.call(this,objArgs);this.field=this.config.field;this.features=Zapatec.Form.Utils.getTokens(this.field.className," ");if(this.hasFeature("zpFormRequired")){this.setFeature("zpFormRequired",true);}this.isBooleanField=(this.field.nodeName.toLowerCase()=='input'&&(this.field.type.toLowerCase()=='radio'||this.field.type.toLowerCase()=='checkbox'));var md=null;if(md=this.field.className.match(/zpFormAllowed-(\S+)/)){if(!this.features['zpFormAllowedChars']){this.features['zpFormAllowedChars']="";}this.features['zpFormAllowedChars']+='\\'+md[1].split('').join('\\');}if(typeof(this.features['zpFormAllowedChars'])!='undefined'&&this.getFeature('zpFormAllowedChars')==null){var undef;this.features['zpFormAllowedChars']=undef;}if((this.hasFeature("zpFormAutoComplete")||this.hasFeature("zpFormAutoCompleteStrict"))&&this.field.nodeName.toUpperCase()=="SELECT"){var input=document.createElement('input');for(var ii=0;ii<this.field.attributes.length;ii++){var attr=this.field.attributes[ii];if(attr.name=='class'){input.className=this.field.getAttribute(attr.name);}else{input.setAttribute(attr.name,this.field.getAttribute(attr.name));}}for(var ii=0;ii<this.field.options.length;ii++){this.autoCompleteOptions.push(this.field.options[ii].innerHTML);}if(this.field.selectedIndex!=null){var val=null;if(this.field.options[this.field.selectedIndex].value!=null&&this.field.options[this.field.selectedIndex].value!=""){val=this.field.options[this.field.selectedIndex].value;}else{val=this.field.options[this.field.selectedIndex].innerHTML;}input.value=val;input.setAttribute("value",val);}Zapatec.Utils.insertAfter(this.field,input);Zapatec.Utils.destroy(this.field);input.type='text';this.field=input;}if(this.hasFeature("zpFormAutoComplete")||this.hasFeature("zpFormAutoCompleteStrict")||this.hasFeature("zpFormSuggest")){this.field.setAttribute("autocomplete","off");this.field.autoComplete="off";}var self=this;this.form=this.config.form;if(!this.form){this.form={container:{elements:[this.field]},fireEvent:function(){},validate:function(){return self.validate()},toggleSubmits:function(){},container:this.field.parentNode};if(this.field.parentNode){Zapatec.Utils.addClass(this.field.parentNode,this.getClassName({prefix:"zpForm"}));}}if(this.hasFeature("zpFormMask")){if(this.field.hasAttribute&&this.field.hasAttribute("maxlength")){this.field.setAttribute("maxlength",null);}var mask=this.getFeature("zpFormMask");var maskChars=mask.split('');this.chars=[];this.enteredValue=[];for(var ii=0;ii<maskChars.length;ii++){var tmp=null;switch(maskChars[ii]){case"0":tmp="[0-9]";break;case"L":tmp="[a-zA-Z]";break;case"A":tmp="[0-9a-zA-Z]";break;case"&":tmp=".";break;case"\\":i++;if(i>=maskChars.length)break;default:this.chars.push(maskChars[ii]);this.enteredValue.push(maskChars[ii]);}if(tmp!=null){var re=new RegExp("^"+tmp+"$");this.chars.push(re);this.enteredValue.push(null);}}}this.createProperty(this.field,"zpFormField",this);var oldOnKeyDown=this.field.onkeydown||function(){return true;};Zapatec.Utils.createProperty(this.field,"onkeydown",function(ev){var zpField=Zapatec.Utils.getTargetElement(ev).zpFormField;var res=oldOnKeyDown();return zpField.keydown(ev)&&res;});var oldOnKeyPress=this.field.onkeypress||function(){return true;};Zapatec.Utils.createProperty(this.field,"onkeypress",function(ev){var zpField=Zapatec.Utils.getTargetElement(ev).zpFormField;var res=oldOnKeyPress();return zpField.keypress(ev)&&res;});Zapatec.Utils.addEvent(this.field,'keyup',function(ev){var zpField=Zapatec.Utils.getTargetElement(ev).zpFormField;return zpField.keyup(ev);});Zapatec.Utils.addEvent(this.field,'focus',function(ev){var zpField=Zapatec.Utils.getTargetElement(ev).zpFormField;return zpField.focus(ev);});Zapatec.Utils.addEvent(this.field,'blur',function(ev){var zpField=Zapatec.Utils.getTargetElement(ev).zpFormField;return zpField.blur(ev);});if(this.field.nodeName.toLowerCase()=='select'){Zapatec.Utils.addEvent(this.field,'change',function(ev){var zpField=Zapatec.Utils.getTargetElement(ev).zpFormField;return zpField.valueChanged(ev);});}var onChangeFunc=function(ev){var zpField=Zapatec.Utils.getTargetElement(ev).zpFormField;return zpField.valueChanged(ev);};Zapatec.Utils.addEvent(this.field,'keyup',onChangeFunc);if(Zapatec.is_ie){Zapatec.Utils.addEvent(this.field,'paste',onChangeFunc);}else if(Zapatec.is_gecko){Zapatec.Utils.addEvent(this.field,'input',onChangeFunc);}else{Zapatec.Utils.addEvent(this.field,'change',onChangeFunc);}if(this.isBooleanField){onChangeFunc=function(ev){var zpField=Zapatec.Utils.getTargetElement(ev).zpFormField;return zpField.booleanChanged();};Zapatec.Utils.addEvent(this.field,'change',onChangeFunc);Zapatec.Utils.addEvent(this.field,'click',onChangeFunc);}this.requiredMark=Zapatec.Utils.createElement('span');this.requiredMark.className=Zapatec.Form.IGNORE_CLASSNAME;this.requiredMark.id="zpFormField"+this.id+"StatusImg1";this.editingMark=this.requiredMark.appendChild(Zapatec.Utils.createElement('span'));this.editingMark.className=Zapatec.Form.IGNORE_CLASSNAME;this.editingMark.id="zpFormField"+this.id+"StatusImg2";this.emptyMark=this.editingMark.appendChild(Zapatec.Utils.createElement('span'));this.emptyMark.className=Zapatec.Form.IGNORE_CLASSNAME;this.emptyMark.id="zpFormField"+this.id+"StatusImg3";this.validMark=this.emptyMark.appendChild(Zapatec.Utils.createElement('span'));this.validMark.className=Zapatec.Form.IGNORE_CLASSNAME;this.validMark.id="zpFormField"+this.id+"StatusImg4";this.fetchingMark=this.validMark.appendChild(Zapatec.Utils.createElement('span'));this.fetchingMark.className=Zapatec.Form.IGNORE_CLASSNAME;this.fetchingMark.id="zpFormField"+this.id+"StatusImg5";this.statusImg=this.fetchingMark.appendChild(Zapatec.Utils.createElement('span'));this.statusImg.className=Zapatec.Form.IGNORE_CLASSNAME+' zpStatusImg';this.statusImg.id="zpFormField"+this.id+"StatusImg";this.addCircularRef(this,"statusImg");this.addCircularRef(this,"fetchingMark");this.addCircularRef(this,"validMark");this.addCircularRef(this,"emptyMark");this.addCircularRef(this,"editingMark");this.addCircularRef(this,"requiredMark");this.errorText=Zapatec.Utils.createElement('span');this.errorText.id="zpFormField"+this.id+"ErrorText";this.errorText.className=Zapatec.Form.IGNORE_CLASSNAME+' zpFormError';if(this.field.type&&this.field.type.toLowerCase()=="hidden"){this.errorText.style.display='none';this.requiredMark.style.display='none';}if(this.isBooleanField){if(this.field.type.toLowerCase()=="checkbox"){this.field.className+=" zpFormCheckbox";this.statusImg.className+=" zpCheckboxStatusImg";}else if(this.field.type.toLowerCase()=="radio"){this.field.className+=" zpFormRadio";this.statusImg.className+=" zpRadioStatusImg";}else{this.statusImg.className+=" zpCommonStatusImg";}}else{this.statusImg.className+=" zpCommonStatusImg";}var lastNode=this.field;if(this.config.formConfig.statusImgPos=='afterField'){Zapatec.Utils.insertAfter(this.field,this.requiredMark);lastNode=this.requiredMark;}else if(this.config.formConfig.statusImgPos=='beforeField'){this.field.parentNode.insertBefore(this.requiredMark,this.field);}if(this.config.formConfig.showErrors=='afterField'){Zapatec.Utils.insertAfter(this.field,this.errorText);lastNode=this.errorText;}else if(this.config.formConfig.showErrors=='beforeField'){this.field.parentNode.insertBefore(this.errorText,this.field);}if(this.hasFeature("zpFormMultiple")){this.createProperty(this.field,"zpLastNode",lastNode);}if(this.hasFeature("zpFormSuggest")||this.hasFeature("zpFormAutoComplete")||this.hasFeature("zpFormAutoCompleteStrict")){if(typeof(Zapatec.AutoComplete)=='undefined'){Zapatec.Transport.loadJS({url:Zapatec.zapatecPath+'../zpautocomplete/src/zpautocomplete-core.js',async:true,onLoad:function(){self.initDropDown();}});}else{this.initDropDown();}}if(this.field.value){this.ajaxValidate();this.suggestValue();this.ajaxFill();}this.setValueFromField(true);};Zapatec.Form.Field.DELAYED_INTERVAL=1000;Zapatec.Form.Field.prototype.initDropDown=function(){var self=this;var arrow=Zapatec.Utils.createElement("span");arrow.className=Zapatec.Form.IGNORE_CLASSNAME+" dropDownArrow";arrow.id="zpFormField"+this.id+"DropDownArrow";this.createProperty(arrow,"onclick",function(ev){self.field.focus(ev);self.autoCompleteValue(self.getAutoCompleteOptions(true));self.suggestValue(true);});Zapatec.Utils.insertAfter(this.field,arrow);var tmpConfig=Zapatec.Utils.clone(this.config.formConfig.autoCompleteConfig);if(!tmpConfig){tmpConfig={};}tmpConfig.fields=[this.field];tmpConfig.width="auto";tmpConfig.dataOnDemand=false;tmpConfig.convertTip=function(tipObj){return tipObj.title;}tmpConfig.selectTip=function(tipObj){self.setValue(tipObj.title)self.valueChanged();if(self.field.onchange){self.field.onchange();}}this.dropDown=new Zapatec.AutoComplete(tmpConfig);this.dropDown.field=this.field;};Zapatec.Form.Field.prototype.valueChanged=function(ev){if(this.hasFeature("zpFormAllowedChars")||this.hasFeature("zpFormMask")){this.setValueFromField();}else{this.validate();}if(!ev){ev=window.event;}this.fireEvent("valueChanged",ev);this.fireEvent("all",ev,"valueChanged");this.form.fireEvent("valueChanged",ev);this.form.fireEvent("all",ev,"valueChanged");return true;};Zapatec.Form.Field.prototype.booleanChanged=function(ev){if(!this.isBooleanField){return;}var elements=this.form.container.elements;for(var ii=0;ii<elements.length;ii++){var el=elements[ii];if(el.name==this.field.name&&el.zpFormField){if(!this.firstRun){el.zpFormField.firstRun=false;}el.zpFormField.validate();}}if(!ev){ev=window.event;}this.fireEvent("valueChanged",ev);this.fireEvent("booleanValueChanged",ev);this.fireEvent("all",ev,"booleanValueChanged");this.form.fireEvent("valueChanged",ev);this.form.fireEvent("booleanValueChanged",ev);this.form.fireEvent("all",ev,"booleanValueChanged");return true;};Zapatec.Form.Field.prototype.keydown=function(evt){if(!this.isEditing){return false;}if(!evt){evt=window.event;}this.fireEvent("keydown",evt);this.fireEvent("all",evt,"keydown");this.form.fireEvent("keydown",evt);this.form.fireEvent("all",evt,"keydown");this.state.lastSelectionStart=this.getSelectionStart();this.state.lastSelectionEnd=this.getSelectionEnd();if(Zapatec.is_ie&&(this.hasFeature('zpFormAllowedChars')||this.hasFeature("zpFormMask"))){var tmpArr=Zapatec.Utils.getCharFromEvent(evt);var charCode=tmpArr.charCode;var newChar=tmpArr.chr;if(Zapatec.Form.Utils.isSpecialKey(charCode,newChar)||this.processFunctionalKeys(evt)==true){return true;}if(this.hasFeature("zpFormMask")){if(this.processCustomKeys(charCode)==true){return true;}return false;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -