javascript处理表单示例(javascript提交表单)
javascript处理表单示例(javascript提交表单)
发布时间:2016-12-30 来源:查字典编辑
摘要:处理各种表单,以及链接,按钮的通用组件复制代码代码如下:/***GenericFormprocessingjs*@authorAnthony...

处理各种表单, 以及链接,按钮的通用组件

复制代码 代码如下:

/**

* Generic Form processing js

* @author Anthony.chen

*/

/**

* Push button action [btn_action]data into form

* If there is prescript , run the pre script

*/

"use strict";

//All ajax request are synchronized by default

var ajaxSynchronized = true;

//All ajax request will be unblock by default

var ajaxAutoUnblock = true;

var ajax_action_button = function (e){

var btn = $(this);

//Add prescript

var pre_script;

if(pre_script = btn.attr("pre_script")){

var ret = eval(pre_script);

if(ret==false){

return false;

}

}

var btn_action = btn.attr('value');

if(btn_action){

$(this).closest('form').data('btn_action',

{ name:'btn_action',value:btn_action }

);

}

};

/**

* Update the extra form data in FormElement with Form element, Key and Value

*/

var ajax_update_post_data = function(formEle, k, v){

var form = $(formEle);

var post_data = form.data('post_data');

if( post_data == undefined ){

post_data = {};

}

if( v == undefined ){

delete post_data[k];

}else{

post_data[k] = v;

}

form.data('post_data',post_data);

return true;

};

/**

* Bool Checkbox is special checkbox which needs to keep UNCHECK value

* And post with ajax form ,the form is in the parent

*/

var bool_checkbox = function(){

var ipt = $(this);

var formEle = ipt.closest("form");

var _check = ipt.prop("checked");

if(_check){

ajax_update_post_data(formEle,ipt.attr('name'));

}else{

ajax_update_post_data(formEle,ipt.attr('name'),'f');

}

};

/**

* Init the spin number

*/

var spin_number = function(){

var spin = $(this);

var config = {

lock:true,

imageBasePath: '{webpath}/css/images/spin/',

btnCss: null,

txtCss: null,

btnClass:'spin_btn',

};

var interval = spin.attr('interval');

if(interval){

config.interval = interval;

}else{

config.interval = 1;

}

var min = spin.attr('min');

if( min ){

config.min = min;

}

var max = spin.attr('max');

if( max ){

config.max = max;

}

spin.spin(config);

return true;

};

/**

* Init the date input

*/

var date_input = function(){

var ipt = $(this);

var config = {

offset:[4,0],

selectors:true,

lang: '{lang}',

firstDay : 1,

format: 'yyyy-mm-dd',

};

var min = ipt.attr('min');

if( min ){

config.min = min;

}

var min = ipt.attr('min');

if( min ){

config.min = min;

}

ipt.dateinput(config);

return true;

};

/**

* Init the timePicker

*/

var time_picker = function(){

var ipt = $(this);

var config = { };

var step = ipt.attr("step");

if( step ){

config.step = step;

}

ipt.timePicker( config );

return true;

};

/**

* Generic Ajax Form post function

* If btn_action is set, then add data into form

* if returi is set, redirect to returi

* if reload is set, reload

* else Show block message

*

* the form will be validated.

*/

var ajax_form_post = function(e){

var form = $(this);

var pre_script;

if(pre_script = form.attr("pre_script")){

var ret = eval(pre_script);

if(ret==false){

return false;

}

}

var errHint = form.find(".formError").first();

if(errHint.size() == 0){

errHint = $("#pageError");

}

errHint.text('').hide();

//Cleanup the pageError

if(!e.isDefaultPrevented()){

//Hide all .formError

$.blockUI({ message:"{__('L_PROCESSING')}" });

var formArray = form.serializeArray();

var btn_action_data;

var btn_action;

if(btn_action_data = form.data('btn_action')){

formArray.push(btn_action_data);

form.removeData('btn_action');

btn_action = btn_action_data.value;

}else{

btn_action = '';

}

console.log('btn action:'+btn_action);

//Add extra Data

var post_data;

if(post_data = form.data('post_data')){

for (var k in post_data ){

//if post_data[k] is array,need more to do

formArray.push( { name:k ,value: post_data[k] } );

}

form.removeData('post_data');

}

$.post(form.attr('action'), formArray,function(json){

if($(window).data('blockUI.isBlocked') == 1){

$.unblockUI();

}

if(json.code === true){

var returi = "";

var retData = "{__('L_PROCESSED')}!";

if(json.data){

retData = json.data;

}

//TODO Add suppport to allow save and stay

if(btn_action =='reqonly'){

if(returi = form.attr('returi')){

$(window).data('blockUI.returi',returi);

ajaxAutoUnblock = false;

}

$.blockUI({ message:retData, css:{ cursor:'pointer',padding:'4px',border:'3px solid #CC0000',}, overlayCSS:{ cursor:'pointer' } });

$(".blockUI").addClass("blockwarn");

} //if there is returi set, then return to uri

else if(returi = form.attr('returi')){

window.location = returi;

//Else if reload is set, then will be reload

}else if(form.attr('reload')!=undefined){

window.location.reload();

}else{

$.blockUI({ message:retData });

$.unblockUI();

}

}

else{

if(typeof (json.data.errmsg) == 'string'){

errHint.html(json.data).show();

//$.blockUI({ message:json.data, css:{ cursor:'pointer',padding:'4px',border:'3px solid #CC0000',}, overlayCSS:{ cursor:'pointer' } });

//$(".blockUI").addClass("blockwarn");

}else{

errHint.html("{Html::text(__('E_FORM'))}").show();

for(var p in json.data){

var msg = json.data[p];

//Process hidden value,None hidden input should has refid refered to hidden value

//Showing the Server message to ref

var ele = form.find("[type=hidden][name="+p+"]");

if(ele.length){

delete json.data.p;

refid = ele.attr("id");

refname = form.find("[hidden-id="+refid+"]").attr("name");

json.data[refname]=+msg;

}

//Muti checkbox

var ele = form.find("[type=checkbox][name='"+p+"[]']");

if(ele.length){

delete json.data.p;

refname = p+'[]';

json.data[refname]=+msg;

}

//@END

}

}

/*

* Checking the hidden values

*/

form.data("validator").invalidate(json.data);

} },'json');

e.preventDefault();

}else{

errHint.html("{Html::text(__('E_FORM'))}").show();

}

};

/***

* Reset the input

*/

var ajax_post_form_hidden = function(){

var form = $(this);

form.find("[hidden-id]").each(function(){

//Clear the message of Reference

var input = $(this);

var refid = input.attr("hidden-id");

var field = $("#" + refid + "");

//Setup the clear of Errmsg

//Monitor the change event on ID element, remove error message

//of Real input

field.change(function(){

//Hidden input

var hinput = $(this);

//real input

var rinput = $("[hidden-id="+hinput.attr("id")+"]").first();

form.data('validator').reset(rinput)

});

});

};

var validate_hidden_id = function(input) {

var refid = input.attr("hidden-id");

var field = $("#" + refid + "");

var msg = field.attr('msg');

if( !msg ){

msg = "{__('E_NOT_EMPTY')}";

}

return field.val() ? true : msg;

};

var data_equals_validate = function(input) {

var field;

var name = input.attr("data-equals");

field = this.getInputs().filter("[name=" + name + "]");

return input.val() == field.val() ? true : [name];

};

/**

* Ajax request through link

* If confirm is set, confirm before send request

* Support returi and reload

* Else show block message

*/

var ajax_link_req = function(){

var l = $(this);

var hint = l.attr('hint');

if(hint){

var errHint = $(l.attr('hint'));

errHint.text('').hide();

}

//If the confirm message is set, then should be confirmed from client

if(l.attr('confirm')){

if(!confirm(l.attr('confirm'))){

return false;

}

}

$.blockUI({ message:"{__('L_PROCESSING')}" });

var pre_script;

if(pre_script = l.attr("pre_script")){

var ret = eval(pre_script);

if(ret==false){

return false;

}

}

var block = l.attr('block');

if(block != undefined){

ajaxAutoUnblock = false;

}

$.get(l.attr('href'),function(json){

if(json.code == true){

var retData = "{__('L_PROCESSED')}!";

var returi;

//If success to execute funtion for each

var successFunc = l.attr('success');

if(successFunc){

l.each(window[successFunc]);

}

if(json.data){

retData = json.data;

}

//IF Require warning before

if( l.attr('value') == 'reqonly'){

alert(retData);

}else if(returi = l.attr('returi')){

window.location = returi;

}

else if(l.attr('reload')!=undefined){

window.location.reload();

}

else{

$.blockUI({ message:retData, css:{ cursor:'pointer',padding:'4px',border:'3px solid #CC0000',}, overlayCSS:{ cursor:'pointer' } });

$(".blockUI").addClass("blockwarn");

}

}else{

//$.unblockUI();

//Only could support Text errmsg

if(hint){

errHint.text(json.data).show();

}else{

alert(json.data);

}

}},'json');

return false;

};

/**

* Supporting the button base navigation

* Only jump to new href

*/

var btn_nav = function(){

var input = $(this);

var href = input.attr("href");

if(href){

window.location = href;

}else{

alert("Href not set");

}

return false;

};

/**

* Support button base Ajax get method request

* support returi and reload

*/

var btn_req = function(){

var input = $(this);

var href = input.attr("href");

var hint = input.attr('hint');

if(hint){

var errHint = $(hint).first();

if(errHint.size() == 0){

errHint = $("#pageError");

}

errHint.text('').hide();

}

var block = input.attr('block');

if(block != undefined){

ajaxAutoUnblock = false

}

$.get(href,function(json){

if(json.code == true){

var returi;

if(returi = input.attr('returi')){

window.location = returi;

}

else if(input.attr("reload")!=undefined){

window.location.reload();

}else{

var retData = "{__('L_PROCESSED')}!";

if(json.data){

retData = json.data;

}

$.blockUI({ message:retData,css:{ cursor:'pointer' },overlayCSS:{ cursor:'pointer' } });

}

}else{

if(hint){

$.unblockUI();

errHint.html(json.data.errmsg).show();

}else{

$.blockUI({ message:json.data.errmsg, css:{ cursor:'pointer',padding:'4px',border:'3px solid #CC0000',}, overlayCSS:{ cursor:'pointer' } });

$(".blockUI").addClass("blockwarn");

}

}

},'json');

return false;

};

/**

* Generic Ajax Checkbox

* The default action is prevented and submit real request through URL

*/

var ajax_checkbox = function(){

event.preventDefault();

var action = $(this);

var url = action.attr('url');

var _check = action.prop("checked");

console.log(_check);

var op ;

if(_check){

op = "1";

}else{

op = "0";

}

$.get(url + op ,function(json){

if(json.code == true){

if(_check){

action.prop("checked",true);

}else{

action.prop("checked",false);

}

return true;

}else{

return false;

}

},'json');

};

/**

* Crete Root picklist

*/

var picklistinit = function(){

var _select = $(this);

var _hidden_id = _select.attr('hidden-id');

var _un = _select.attr('un');

var _lovchildren = _select.data('lovtree').c;

var _rowvalue = _select.data('rowvalue');

$("<OPTION>").append("{__('L_SELECT')}").appendTo(_select);

for(var _kid in _lovchildren){

var _lov = _lovchildren[_kid]['lov'];

$("<OPTION>").val(_lov.lov_id).append(_lov.v).attr('k',_lov.id).attr('is_leaf',_lov.is_leaf).appendTo(_select);

}

_select.change(picklistchange);

//Select the list

if(_rowvalue){

_select.find("[value="+_rowvalue[0]+"]").prop("selected",true);

_select.change();

}

return true;

};

/**

* Select pick list

*/

var picklistchange = function (){

var _select = $(this);

var _hidden_id = _select.attr('hidden-id');

var _un = _select.attr('un');

//Remove all the subsequent

var _lovtree = _select.data('lovtree');

var _rowvalue = _select.data('rowvalue');

_select.nextAll().remove();

//This is value of Current Select

var _selected = _select.find(':selected');

if(_selected.attr('is_leaf')=="{DB::T}"){

$("#"+_hidden_id).val(_select.val());

_select.after("<img src='http://www.jb51.nets.gif'/>");

}else{

var _val = _select.val();

var _k = _selected.attr('k');

//Getting Children list

if(_lovtree.c[_k].c == undefined){

return false;

}

var _c_lovtree = _lovtree.c[_k];

var _c_select = $('<SELECT>').data('lovtree',_c_lovtree).

data('rowvalue',_rowvalue).

attr('hidden-id',_hidden_id).attr('un',_un).

attr('name',_un+'_'+_k);

$("<OPTION>").append("{__('L_SELECT')}").appendTo(_c_select);

//Building the option list

for(var _kid in _c_lovtree.c){

var _lov = _c_lovtree.c[_kid]['lov'];

$("<OPTION>").val(_lov.lov_id).append(_lov.v).attr('k',_lov.id).attr('is_leaf',_lov.is_leaf).appendTo(_c_select);

//Insert after

_select.after(_c_select);

//Onchange

}

_c_select.change(picklistchange);

if(_rowvalue){

_c_select.find("[value="+_rowvalue[_k]+"]").prop("selected",true);

_c_select.change();

}

}

};

var lookup_new = function(){

var lookup = $(this);

var pre_script;

if(pre_script = lookup.attr("pre_script")){

var ret = eval(pre_script);

if(ret==false){

return false;

}

}

var url = lookup.attr("url");

if(!url){

alert('url not set');

return false;

}

var height = lookup.attr('h');

if(!height){

height = 600;

}

var width = lookup.attr('w');

if(!width){

width = 800;

}

window.open(url,"pselect","scrollbars=yes,menubar=no,height="+height+",width="+width+",resizable=yes,toolbar=no,location=no,status=no");

return false;

};

/**

* Lookup new value for hidden value

*/

var parent_lookup = function(){

var lookup = $(this);

var pid = opener.$("#" + lookup.attr('pid'));

if(!pid.length){

alert(lookup.attr('pid')+ " not found");

return false;

}

var pname = opener.$( "#" + lookup.attr('pname'));

if(!pname.length){

alert(lookup.attr('pname')+ " not found");

return false;

}

var aft_script;

//Run current after script

if(aft_script = lookup.attr('aft_script')){

window.eval(aft_script);

}

pid.val($(this).attr("refid"));

//Only operation from opener could trigger change event

pid.change();

pname.val($(this).attr("refvalue"));

pname.change();

//Parent after_script

if(aft_script = pname.attr('aft_script')){

opener.window.eval(aft_script);

}

if(aft_script = pid.attr('aft_script')){

opener.window.eval(aft_script);

}

window.close();

};

/**

* Default upload complete

*/

//var uploadComplete = function(event, id, fileName, responseJSON) {

var uploadComplete = function(e, data) {

//To be replaced by jquery uploader

var _fileUpload = $(this);

//console.log(_fileUpload);

//console.log(data.result);

if(_fileUpload.attr('reload')!=undefined){

window.location.reload();

}

};

/**

* File upload function ,the following attribute to control action of upload

* 'endpoint' as upload url

* 'sid' as session id

* 'complete' optional to configure the custom upload complete function

*/

var genericUpload = function(dom){

var endpointurl = $(this).attr('endpoint');

var sid = $(this).attr("sid");

var completeFunc = 'uploadComplete';

//Setup custome complete function

var cusComplete = $(this).attr('complete');

if(cusComplete){

completeFunc = cusComplete;

}

$(this).fileupload({

url: endpointurl,

autoUpload:true,

dataType:'json',

formData: [{ 'sessionid': sid }],

paramName: 'Filedata',

}).bind('fileuploaddone',window[completeFunc]);

};

/**

* Matched errors with input

* Only matched errors could be identified here

*/

var advance_validate = function(errors, event) {

var conf = this.getConf();

// loop errors

$.each(errors, function(index, error) {

// add error class into input Dom element

var input = error.input;

input.addClass(conf.errorClass);

// get handle to the error container

var msg = input.data("msg.el");

// create Error data if not present, and add error class for input

// "msg.el" data is linked to error message Dom Element

if (!msg) {

//msg = $(conf.message).addClass(conf.messageClass).insertAfter(input);

msg = $(conf.message).addClass(conf.messageClass).appendTo(input.parent());

input.data("msg.el", msg);

}

// clear the container

msg.css({visibility: 'hidden'}).find("span").remove();

// populate messages

$.each(error.messages, function(i, m) {

$("<span/>").html(m).appendTo(msg);

});

// make sure the width is not full body width so it can be positioned correctly

if (msg.outerWidth() == msg.parent().width()) {

msg.add(msg.find("span"));

}

//insert into correct position (relative to the field)

msg.css({ visibility: 'visible'}) .fadeIn(conf.speed);

msg.parent().addClass("colError");

});

};

var advance_inputs = function(inputs) {

var conf = this.getConf();

inputs.removeClass(conf.errorClass).each(function() {

var msg = $(this).data("msg.el");

if (msg) {

msg.hide();

msg.parent().removeClass("colError");

}

});

if($(".colError").size() == 0){

var form = $(this);

var errHint = form.find(".formError").first();

if(errHint.size() == 0){

errHint = $("#pageError");

errHint.text('').hide();

}

}

};

/**

* When refname is contained to be selected

*/

var checkall = function() {

var check = $(this);

var refname = check.attr('refname');

if(refname){

if(check.prop("checked")){

$("input[name*='"+refname+"']").prop("checked",true);

}else{

$("input[name*='"+refname+"']").prop("checked",false);

}

}

var refclass = check.attr('refclass');

if(refclass){

if(check.prop("checked")){

$("input."+refclass).prop("checked",true);

}else{

$("input."+refclass).prop("checked",false);

}

}

};

/**

* Setup readonly checkbox

*/

var readonlyCheck = function(e){

e.preventDefault();

return false;

};

/**

* Select List disable

*/

var readonlySelect = function(){

$(this).prop("disabled", true);

};

$(document).ready(function() {

$(document).ajaxStart(function(){

//Clean up the Ajax request Page Level Error

$("#pageError").text('').hide();

//Clean up teh Form Error

$(".formError").text('').hide();

//Blocking all ajax processing

if(ajaxSynchronized){

$.blockUI({ message:"{__('L_PROCESSING')}" });

}

});

$(document).ajaxStop(function(){

if(ajaxSynchronized){

if($(window).data('blockUI.isBlocked') == 1){

if(ajaxAutoUnblock){

$.unblockUI();

}else{

ajaxAutoUnblock = true;

}

}

}else{//Change back to default Synchronized mode from Async

ajaxAutoUnblock = true;

ajaxSynchronized = true;

}

});

$(document).ajaxError(function(event, request, settings){

alert('Ajax Request Error! URL='+settings.url);

if(ajaxSynchronized){

if($(window).data('blockUI.isBlocked') == 1){

if(ajaxAutoUnblock){

$.unblockUI();

}else{

ajaxAutoUnblock = true;

}

}

}else{

ajaxAutoUnblock = true;

ajaxSynchronized = true;

}

});

//Force unblockUI

$(document).click(function(){

if($(window).data('blockUI.isBlocked') == 1){

$.unblockUI();

var returi = $(window).data('blockUI.returi');

if(returi){

window.location = returi;

}

}});

$.tools.validator.addEffect("advanced", advance_validate,advance_inputs);

$.tools.validator.fn("[data-equals]", { "{lang}":"{__('E_NOTEQUAL')}" }, data_equals_validate );

$.tools.validator.fn("[hidden-id]",validate_hidden_id);

$(".ajax_form_post").validator({ lang:'{lang}',effect:'advanced' }) .submit( ajax_form_post );

$(".ajax_form_post").each(ajax_post_form_hidden);

$(".spin_number").each(spin_number);

$(".date_input").each(date_input);

$(".time_picker").each(time_picker);

$('.ajax_link_req').click(ajax_link_req);

//Client validation for the hidden ID

$(".require_validate").validator({ lang:'{lang}',effect:'advanced' });

$(".btn_nav").click( btn_nav );

$(".btn_req").click( btn_req );

$("button.btn_action").click(ajax_action_button);

$(".lookup_new").click(lookup_new);

$(".parent_lookup").click(parent_lookup);

$(".ajax_checkbox").click(ajax_checkbox);

$(".bool_checkbox").click(bool_checkbox);

$(".checkall").click(checkall);

$("img[rel]").overlay();

$("input[tip]").tooltip({ position:"center right"});

//At last we will do localize

$.tools.validator.localize("{lang}", {

'*' : "{__('E_ALL')}",

':email' : "{__('E_EMAIL')}",

':number' : "{__('E_DECIMAL')}",

':url' : "{__('E_URL')}",

'[max]' : "{__('E_MAX_LENGTH')}",

'[min]' : "{__('E_MIN_LENGTH')}",

'[required]' : "{__('E_NOT_EMPTY')}",

});

});

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类