var $c = {"query":{"_j":["ajaxform"],"id":["inquiry"]},"action":"index","config":{"encodingOfHTML":"utf8","style":{"input":{"onfocus":{"color":"#000","background":"#CC0"},"default":{"color":"#000","background":"#FFC"},"invalid":{"color":"#FFF","background":"#F00"}},"errsign":{"default":{"color":"#000","background":"#F0F0F0"},"invalid":{"color":"#F00","background":"#FCC"}}},"mail_settings":{"client":"sendmail","path":"/usr/sbin/sendmail"}},"stylesheet":null,"javascript":"ajaxform","image":null,"module":null}; var validate_timings = ['blur', 'change']; var form_ids = $c.query.id; Event.observe(window, 'load', function(){ form_ids.each(function(id){ // Ajaxバリデート $A($(id).elements).each(function(e){ if(e.name) { validate_timings.each(function(validate_timing){ Event.observe(e, validate_timing, function(){validate(id, [this]);}); }); } }); }); }); function validate(form_id, elements){ var pars = '_m=' + form_id + '&_a=validate'; elements = $A(elements); // value設定 var names_hash = {}; elements.each(function(element){ names_hash[element.name] = 1; pars += '&' + element.name + '='; // checkbox, radioの場合は同一name属性を持つinputのvalueも送信する if(element.type.match(/(checkbox|radio)/i )) { pars += $N(element.name).findAll(function(e){ return e.checked; }).collect(function(e){ return encodeURI(e.value); }).join('&' + element.name + '='); } // confirmationの場合は比較先のinputのvalueも送信 else if(element.name.match(/(.*)_confirmation$/)) { if(!names_hash[RegExp.$1]) { pars += encodeURI(element.value); pars += '&' + RegExp.$1 + '=' + encodeURI($(form_id)[RegExp.$1].value); } } else { pars += encodeURI(element.value); } }); // value空の場合のためにバリデート対象のnameを送信 pars += '&' + elements.collect(function(element){ return '_name=' + element.name; }).join('&'); new Ajax.Request('./index.cgi', { parameters: pars}); } var i = 0; function display_error($c, names) { var names_h = {}; names = $A(names); names.each(function(name){ names_h[name] = 1; }) names = $H(names_h).keys(); names.each(function(name){ if(name){ var span_error = $('error_' + name); if(span_error) { if($c.error[name]) { span_error.innerHTML = $c.error[name]; } else { span_error.innerHTML = ''; } } // エラーのときのみinput, errsigntのスタイルを変える if($c.error[name]) { $$('.errsign_' + name).each(function(element){ element.style.color = '#F00'; element.style.background = '#FCC'; }); if($(name)) { if(!$(name).type.match(/(button|submit|reset|checkbox|radio)/i)) { Element.addClassName($(name), 'invalid'); $(name).style.color = '#FFF'; $(name).style.background = '#F00'; } } } else { $$('.errsign_' + name).each(function(element){ element.style.color = '#000'; element.style.background = '#F0F0F0'; }); if($(name)) { if(!$(name).type.match(/(button|submit|reset|checkbox|radio)/i)) { Element.removeClassName($(name), 'invalid'); $(name).style.color = '#000'; $(name).style.background = '#FFC'; } } } // チェックマーク変更 var checkmark = $('checkmark_' + name); if($c.error[name]) { if(checkmark) { if(checkmark.tagName.match(/img/i)) { checkmark.src = './index.cgi?_i=check_invalid.gif'; } else { checkmark.innerHTML = ''; } } } else { if(checkmark) { if(checkmark.tagName.match(/img/i)) { checkmark.src = './index.cgi?_i=check_valid.gif'; } else { checkmark.innerHTML = ''; } } } } }); } function ajax_submit(form, options){ if(options) { var pars = form.serialize(); if(options.action) { if($('_a')) { $('_a').value = options.action; } else { pars += '_a=' + options.action; } } if(options.update) { new Ajax.Updater( options.update, form.action, { parameters: pars } ); } } else { new Ajax.Request(form.action, { parameters: form.serialize() }); } } function $N (name) { return $$('*').findAll(function(e){ return e.name == name; }); }