You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
392 lines
9.7 KiB
392 lines
9.7 KiB
/**
|
|
* jQuery EasyUI 1.3.6
|
|
*
|
|
* Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.
|
|
*
|
|
* Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt
|
|
* To use it on other terms please contact us at info@jeasyui.com
|
|
*
|
|
*/
|
|
/**
|
|
* form - jQuery EasyUI
|
|
*
|
|
*/
|
|
(function($){
|
|
/**
|
|
* submit the form
|
|
*/
|
|
function ajaxSubmit(target, options){
|
|
options = options || {};
|
|
|
|
var param = {};
|
|
if (options.onSubmit){
|
|
if (options.onSubmit.call(target, param) == false) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
var form = $(target);
|
|
if (options.url){
|
|
form.attr('action', options.url);
|
|
}
|
|
var frameId = 'easyui_frame_' + (new Date().getTime());
|
|
var frame = $('<iframe id='+frameId+' name='+frameId+'></iframe>')
|
|
.attr('src', window.ActiveXObject ? 'javascript:false' : 'about:blank')
|
|
.css({
|
|
position:'absolute',
|
|
top:-1000,
|
|
left:-1000
|
|
});
|
|
var t = form.attr('target'), a = form.attr('action');
|
|
form.attr('target', frameId);
|
|
|
|
var paramFields = $();
|
|
try {
|
|
frame.appendTo('body');
|
|
frame.bind('load', cb);
|
|
for(var n in param){
|
|
var f = $('<input type="hidden" name="' + n + '">').val(param[n]).appendTo(form);
|
|
paramFields = paramFields.add(f);
|
|
}
|
|
checkState();
|
|
form[0].submit();
|
|
} finally {
|
|
form.attr('action', a);
|
|
t ? form.attr('target', t) : form.removeAttr('target');
|
|
paramFields.remove();
|
|
}
|
|
|
|
function checkState(){
|
|
var f = $('#'+frameId);
|
|
if (!f.length){return}
|
|
try{
|
|
var s = f.contents()[0].readyState;
|
|
if (s && s.toLowerCase() == 'uninitialized'){
|
|
setTimeout(checkState, 100);
|
|
}
|
|
} catch(e){
|
|
cb();
|
|
}
|
|
}
|
|
|
|
var checkCount = 10;
|
|
function cb(){
|
|
var frame = $('#'+frameId);
|
|
if (!frame.length){return}
|
|
frame.unbind();
|
|
var data = '';
|
|
try{
|
|
var body = frame.contents().find('body');
|
|
data = body.html();
|
|
if (data == ''){
|
|
if (--checkCount){
|
|
setTimeout(cb, 100);
|
|
return;
|
|
}
|
|
// return;
|
|
}
|
|
var ta = body.find('>textarea');
|
|
if (ta.length){
|
|
data = ta.val();
|
|
} else {
|
|
var pre = body.find('>pre');
|
|
if (pre.length){
|
|
data = pre.html();
|
|
}
|
|
}
|
|
} catch(e){
|
|
|
|
}
|
|
if (options.success){
|
|
options.success(data);
|
|
}
|
|
setTimeout(function(){
|
|
frame.unbind();
|
|
frame.remove();
|
|
}, 100);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* load form data
|
|
* if data is a URL string type load from remote site,
|
|
* otherwise load from local data object.
|
|
*/
|
|
function load(target, data){
|
|
if (!$.data(target, 'form')){
|
|
$.data(target, 'form', {
|
|
options: $.extend({}, $.fn.form.defaults)
|
|
});
|
|
}
|
|
var opts = $.data(target, 'form').options;
|
|
|
|
if (typeof data == 'string'){
|
|
var param = {};
|
|
if (opts.onBeforeLoad.call(target, param) == false) return;
|
|
|
|
$.ajax({
|
|
url: data,
|
|
data: param,
|
|
dataType: 'json',
|
|
success: function(data){
|
|
_load(data);
|
|
},
|
|
error: function(){
|
|
opts.onLoadError.apply(target, arguments);
|
|
}
|
|
});
|
|
} else {
|
|
_load(data);
|
|
}
|
|
|
|
function _load(data){
|
|
var form = $(target);
|
|
for(var name in data){
|
|
var val = data[name];
|
|
var rr = _checkField(name, val);
|
|
if (!rr.length){
|
|
// var f = form.find('input[numberboxName="'+name+'"]');
|
|
// if (f.length){
|
|
// f.numberbox('setValue', val); // set numberbox value
|
|
// } else {
|
|
// $('input[name="'+name+'"]', form).val(val);
|
|
// $('textarea[name="'+name+'"]', form).val(val);
|
|
// $('select[name="'+name+'"]', form).val(val);
|
|
// }
|
|
var count = _loadOther(name, val);
|
|
if (!count){
|
|
$('input[name="'+name+'"]', form).val(val);
|
|
$('textarea[name="'+name+'"]', form).val(val);
|
|
$('select[name="'+name+'"]', form).val(val);
|
|
}
|
|
}
|
|
_loadCombo(name, val);
|
|
}
|
|
opts.onLoadSuccess.call(target, data);
|
|
validate(target);
|
|
}
|
|
|
|
/**
|
|
* check the checkbox and radio fields
|
|
*/
|
|
function _checkField(name, val){
|
|
var rr = $(target).find('input[name="'+name+'"][type=radio], input[name="'+name+'"][type=checkbox]');
|
|
rr._propAttr('checked', false);
|
|
rr.each(function(){
|
|
var f = $(this);
|
|
if (f.val() == String(val) || $.inArray(f.val(), $.isArray(val)?val:[val]) >= 0){
|
|
f._propAttr('checked', true);
|
|
}
|
|
});
|
|
return rr;
|
|
}
|
|
|
|
function _loadOther(name, val){
|
|
var count = 0;
|
|
var pp = ['numberbox','slider'];
|
|
for(var i=0; i<pp.length; i++){
|
|
var p = pp[i];
|
|
var f = $(target).find('input['+p+'Name="'+name+'"]');
|
|
if (f.length){
|
|
f[p]('setValue', val);
|
|
count += f.length;
|
|
}
|
|
}
|
|
return count;
|
|
}
|
|
|
|
function _loadCombo(name, val){
|
|
var form = $(target);
|
|
var cc = ['combobox','combotree','combogrid','datetimebox','datebox','combo'];
|
|
var c = form.find('[comboName="' + name + '"]');
|
|
if (c.length){
|
|
for(var i=0; i<cc.length; i++){
|
|
var type = cc[i];
|
|
if (c.hasClass(type+'-f')){
|
|
if (c[type]('options').multiple){
|
|
c[type]('setValues', val);
|
|
} else {
|
|
c[type]('setValue', val);
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* clear the form fields
|
|
*/
|
|
function clear(target){
|
|
$('input,select,textarea', target).each(function(){
|
|
var t = this.type, tag = this.tagName.toLowerCase();
|
|
if (t == 'text' || t == 'hidden' || t == 'password' || tag == 'textarea'){
|
|
this.value = '';
|
|
} else if (t == 'file'){
|
|
var file = $(this);
|
|
var newfile = file.clone().val('');
|
|
newfile.insertAfter(file);
|
|
if (file.data('validatebox')){
|
|
file.validatebox('destroy');
|
|
newfile.validatebox();
|
|
} else {
|
|
file.remove();
|
|
}
|
|
} else if (t == 'checkbox' || t == 'radio'){
|
|
this.checked = false;
|
|
} else if (tag == 'select'){
|
|
this.selectedIndex = -1;
|
|
}
|
|
|
|
});
|
|
// if ($.fn.combo) $('.combo-f', target).combo('clear');
|
|
// if ($.fn.combobox) $('.combobox-f', target).combobox('clear');
|
|
// if ($.fn.combotree) $('.combotree-f', target).combotree('clear');
|
|
// if ($.fn.combogrid) $('.combogrid-f', target).combogrid('clear');
|
|
|
|
var t = $(target);
|
|
var plugins = ['combo','combobox','combotree','combogrid','slider'];
|
|
for(var i=0; i<plugins.length; i++){
|
|
var plugin = plugins[i];
|
|
var r = t.find('.'+plugin+'-f');
|
|
if (r.length && r[plugin]){
|
|
r[plugin]('clear');
|
|
}
|
|
}
|
|
validate(target);
|
|
}
|
|
|
|
function reset(target){
|
|
target.reset();
|
|
var t = $(target);
|
|
// if ($.fn.combo){t.find('.combo-f').combo('reset');}
|
|
// if ($.fn.combobox){t.find('.combobox-f').combobox('reset');}
|
|
// if ($.fn.combotree){t.find('.combotree-f').combotree('reset');}
|
|
// if ($.fn.combogrid){t.find('.combogrid-f').combogrid('reset');}
|
|
// if ($.fn.datebox){t.find('.datebox-f').datebox('reset');}
|
|
// if ($.fn.datetimebox){t.find('.datetimebox-f').datetimebox('reset');}
|
|
// if ($.fn.spinner){t.find('.spinner-f').spinner('reset');}
|
|
// if ($.fn.timespinner){t.find('.timespinner-f').timespinner('reset');}
|
|
// if ($.fn.numberbox){t.find('.numberbox-f').numberbox('reset');}
|
|
// if ($.fn.numberspinner){t.find('.numberspinner-f').numberspinner('reset');}
|
|
|
|
var plugins = ['combo','combobox','combotree','combogrid','datebox','datetimebox','spinner','timespinner','numberbox','numberspinner','slider'];
|
|
for(var i=0; i<plugins.length; i++){
|
|
var plugin = plugins[i];
|
|
var r = t.find('.'+plugin+'-f');
|
|
if (r.length && r[plugin]){
|
|
r[plugin]('reset');
|
|
}
|
|
}
|
|
validate(target);
|
|
}
|
|
|
|
/**
|
|
* set the form to make it can submit with ajax.
|
|
*/
|
|
function setForm(target){
|
|
var options = $.data(target, 'form').options;
|
|
var form = $(target);
|
|
form.unbind('.form').bind('submit.form', function(){
|
|
setTimeout(function(){
|
|
ajaxSubmit(target, options);
|
|
}, 0);
|
|
return false;
|
|
});
|
|
}
|
|
|
|
// function validate(target){
|
|
// if ($.fn.validatebox){
|
|
// var box = $('.validatebox-text', target);
|
|
// if (box.length){
|
|
// box.validatebox('validate');
|
|
//// box.trigger('focus');
|
|
//// box.trigger('blur');
|
|
// var invalidbox = $('.validatebox-invalid:first', target).focus();
|
|
// return invalidbox.length == 0;
|
|
// }
|
|
// }
|
|
// return true;
|
|
// }
|
|
function validate(target){
|
|
if ($.fn.validatebox){
|
|
var t = $(target);
|
|
t.find('.validatebox-text:not(:disabled)').validatebox('validate');
|
|
var invalidbox = t.find('.validatebox-invalid');
|
|
invalidbox.filter(':not(:disabled):first').focus();
|
|
return invalidbox.length == 0;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function setValidation(target, novalidate){
|
|
$(target).find('.validatebox-text:not(:disabled)').validatebox(novalidate ? 'disableValidation' : 'enableValidation');
|
|
}
|
|
|
|
$.fn.form = function(options, param){
|
|
if (typeof options == 'string'){
|
|
return $.fn.form.methods[options](this, param);
|
|
}
|
|
|
|
options = options || {};
|
|
return this.each(function(){
|
|
if (!$.data(this, 'form')){
|
|
$.data(this, 'form', {
|
|
options: $.extend({}, $.fn.form.defaults, options)
|
|
});
|
|
}
|
|
setForm(this);
|
|
});
|
|
};
|
|
|
|
$.fn.form.methods = {
|
|
submit: function(jq, options){
|
|
return jq.each(function(){
|
|
var opts = $.extend({},
|
|
$.fn.form.defaults,
|
|
$.data(this, 'form') ? $.data(this, 'form').options : {},
|
|
options||{}
|
|
);
|
|
ajaxSubmit(this, opts);
|
|
});
|
|
},
|
|
load: function(jq, data){
|
|
return jq.each(function(){
|
|
load(this, data);
|
|
});
|
|
},
|
|
clear: function(jq){
|
|
return jq.each(function(){
|
|
clear(this);
|
|
});
|
|
},
|
|
reset: function(jq){
|
|
return jq.each(function(){
|
|
reset(this);
|
|
});
|
|
},
|
|
validate: function(jq){
|
|
return validate(jq[0]);
|
|
},
|
|
disableValidation: function(jq){
|
|
return jq.each(function(){
|
|
setValidation(this, true);
|
|
});
|
|
},
|
|
enableValidation: function(jq){
|
|
return jq.each(function(){
|
|
setValidation(this, false);
|
|
});
|
|
}
|
|
};
|
|
|
|
$.fn.form.defaults = {
|
|
url: null,
|
|
onSubmit: function(param){return $(this).form('validate');},
|
|
success: function(data){},
|
|
onBeforeLoad: function(param){},
|
|
onLoadSuccess: function(data){},
|
|
onLoadError: function(){}
|
|
};
|
|
})(jQuery);
|
|
|