// ================================================================ // ajaxzip2.js ---- AjaxZip 2 郵便番å·â†’使‰€å¤‰æ›ãƒ©ã‚¤ãƒ–ラリ // Copyright 2006-2007 Kawasaki Yusuke <u-suke [at] kawa.net> // http://www.kawa.net/works/ajax/ajaxzip2/ajaxzip2.html // ================================================================ // -- JSONP化 -- // Copyrigh (c)t 2007 @WEB // http://www.atmarkweb.jp/ AjaxZip2 = function () {}; AjaxZip2.VERSION = '2.06'; AjaxZip2.JSONDATA = 'ajaxzip2/data/'; AjaxZip2.CACHE = []; AjaxZip2.prev = ''; AjaxZip2.PREFMAP = [ null, '北海é“', 'é’æ£®çœŒ', '岩手県', '宮城県', '秋田県', '山形県', 'ç¦å³¶çœŒ', '茨城県', 'æ ƒæœ¨çœŒ', '群馬県', '埼玉県', 'åƒè‘‰çœŒ', 'æ±äº¬éƒ½', '神奈å·çœŒ', '新潟県', '富山県', '石å·çœŒ', 'ç¦äº•県', '山梨県', '長野県', 'å²é˜œçœŒ', 'é™å²¡çœŒ', '愛知県', '三é‡çœŒ', '滋賀県', '京都府', '大阪府', '兵庫県', '奈良県', 'å’ŒæŒå±±çœŒ', 'é³¥å–県', 'å³¶æ ¹çœŒ', '岡山県', '広島県', 'å±±å£çœŒ', '徳島県', '香å·çœŒ', '愛媛県', '高知県', 'ç¦å²¡çœŒ', 'ä½è³€çœŒ', '長崎県', '熊本県', '大分県', '宮崎県', '鹿å…島県', '沖縄県' ]; var AjaxZipMyCallback = function () {}; var AjaxZipMyCallback2 = function () {}; var AjaxZipMyCallback3 = function () {}; AjaxZip2.message = new Array(); AjaxZip2.message[0] = 'ï¼—æ¡ã®éƒµä¾¿ç•ªå·ã‚’入力ã—ã¦ãã ã•ã„'; AjaxZip2.message[1] = ' --- 検索ä¸ã€€---'; AjaxZip2.message[2] = '該当ã®ä½æ‰€ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ'; AjaxZip2.zip2addr = function ( azip1, apref, aaddr, azip2, astrt, aarea ) { var fzip1 = AjaxZip2.getElementByName(azip1); var fzip2 = AjaxZip2.getElementByName(azip2,fzip1); var fpref = AjaxZip2.getElementByName(apref,fzip1); var faddr = AjaxZip2.getElementByName(aaddr,fzip1); var fstrt = AjaxZip2.getElementByName(astrt,fzip1); var farea = AjaxZip2.getElementByName(aarea,fzip1); //if ( ! fzip1 ) return; //if ( ! fpref ) return; //if ( ! faddr ) return; // 郵便番å·ã‚’æ•°å—ã®ã¿7æ¡å–り出㙠var vzip = fzip1.value; if ( fzip2 && fzip2.value ) vzip += fzip2.value; //if ( ! vzip ) return; var nzip = ''; for( var i=0; i<vzip.length; i++ ) { var chr = vzip.charCodeAt(i); if ( chr < 48 ) continue; if ( chr > 57 ) continue; nzip += vzip.charAt(i); } if ( nzip.length < 7 ){ if ( fpref.type == 'select-one' || fpref.type == 'select-multiple' ) { faddr.value = AjaxZip2.message[0]; }else{ fpref.value = AjaxZip2.message[0]; } return; } /* // å‰å›žã¨åŒã˜å€¤ï¼†ãƒ•ォームãªã‚‰ã‚ャンセル var uniq = nzip+fzip1.name+fpref.name+faddr.name; if ( fzip1.form ) uniq += fzip1.form.id+fzip1.form.name+fzip1.form.action; if ( fzip2 ) uniq += fzip2.name; if ( fstrt ) uniq += fstrt.name; if ( uniq == AjaxZip2.prev ) return; AjaxZip2.prev = uniq; */ // JSONå–得後ã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯é–¢æ•° AjaxZipMyCallback2 = function ( data ) { var array = data[nzip]; if( ! array ){ if ( fpref.type == 'select-one' || fpref.type == 'select-multiple' ) { faddr.value = AjaxZip2.message[2]; }else{ fpref.value = AjaxZip2.message[2]; } return; } // Opera ãƒã‚°å¯¾ç–:0x00800000 ã‚’è¶…ãˆã‚‹æ·»å—㯠+0xff000000 ã•れã¦ã—ã¾ã† var opera = (nzip-0+0xff000000)+""; if ( ! array && data[opera] ) array = data[opera]; if ( !array ) return; var pref_id = array[0]; // 都é“府県ID if ( ! pref_id ) return; var jpref = AjaxZip2.PREFMAP[pref_id]; // 都é“府県å if ( ! jpref ) return; var jcity = array[1]; if ( ! jcity ) jcity = ''; // 市区町æ‘å var jarea = array[2]; if ( ! jarea ) jarea = ''; // 町域å var jstrt = array[3]; if ( ! jstrt ) jstrt = ''; // 番地 var cursor = faddr; var jaddr = jcity; // 市区町æ‘å if ( fpref.type == 'select-one' || fpref.type == 'select-multiple' ) { // 都é“府県プルダウンã®å ´åˆ var opts = fpref.options; for( var i=0; i<opts.length; i++ ) { var vpref = opts[i].value; var tpref = opts[i].text; opts[i].selected = ( vpref == pref_id || vpref == jpref || tpref == jpref ); } } else { if ( fpref.name == faddr.name ) { // 都é“府県å+市区町æ‘å+町域ååˆä½“ã®å ´åˆ jaddr = jpref + jaddr; } else { // 都é“府県åテã‚スト入力ã®å ´åˆ fpref.value = jpref; } } if ( farea ) { cursor = farea; farea.value = jarea; } else { jaddr += jarea; } if ( fstrt ) { cursor = fstrt; if ( faddr.name == fstrt.name ) { // 市区町æ‘å+町域å+番地åˆä½“ã®å ´åˆ jaddr = jaddr + jstrt; } else if ( jstrt ) { // 番地テã‚スト入力欄ãŒã‚ã‚‹å ´åˆ fstrt.value = jstrt; } } faddr.value = jaddr; // patch from http://iwa-ya.sakura.ne.jp/blog/2006/10/20/050037 // update http://www.kawa.net/works/ajax/ajaxzip2/ajaxzip2.html#com-2006-12-15T04:41:22Z if ( ! cursor ) return; if ( ! cursor.value ) return; var len = cursor.value.length; cursor.focus(); if ( cursor.createTextRange ) { var range = cursor.createTextRange(); range.move('character', len); range.select(); } else if (cursor.setSelectionRange) { cursor.setSelectionRange(len,len); } }; // 郵便番å·ä¸Šä½3æ¡ã§ã‚ãƒ£ãƒƒã‚·ãƒ¥ãƒ‡ãƒ¼ã‚¿ã‚’ç¢ºèª var zip3 = nzip.substr(0,3); var data = AjaxZip2.CACHE[zip3]; if ( data ) return AjaxZipMyCallback2( data ); fpref.value = AjaxZip2.message[1]; // JSONファイルå—信後ã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯é–¢æ•° AjaxZipMyCallback3 = function (req) { if ( ! req ){ fpref.value = AjaxZip2.message[2]; return; } //if ( ! req.responseText ) return; //var json = AjaxZip2.getResponseText( req ); //data = eval('('+json+')'); AjaxZip2.CACHE[zip3] = req; AjaxZipMyCallback2( req ); }; // JSONP コールãƒãƒƒã‚¯é–¢æ•° AjaxZipMyCallback = function( req ){ AjaxZipMyCallback3( req ); }; // JSONファイルをå—ä¿¡ã™ã‚‹ var url = AjaxZip2.JSONDATA+'zip-'+zip3+'.json'; //var opt = { // method: 'GET', // asynchronous: true, // onComplete: func2 //}; //var conn = new Ajax.Request( url, opt ); AjaxZipMyConn(url); }; // Safari æ–‡å—化ã‘対応 // http://kawa.at.webry.info/200511/article_9.html AjaxZip2.getResponseText = function ( req ) { var text = req.responseText;alert(text); //var text = req; if ( navigator.appVersion.indexOf('KHTML') > -1 ) { var esc = escape( text ); if ( esc.indexOf('%u') < 0 && esc.indexOf('%') > -1 ) { text = decodeURIComponent( esc ); } } return text; } // フォームnameã‹ã‚‰è¦ç´ ã‚’å–り出㙠AjaxZip2.getElementByName = function ( elem, sibling ) { if ( typeof(elem) == 'string' ) { var list = document.getElementsByName(elem); if ( ! list ) return null; if ( list.length > 1 && sibling && sibling.form ) { var form = sibling.form.elements; for( var i=0; i<form.length; i++ ) { if ( form[i].name == elem ) { return form[i]; } } } else { return list[0]; } } return elem; } function AjaxZipMyConn(url){ var script = document.createElement("script"); script.charset = "utf-8"; script.src = url; script.type= "text/javascript"; document.body.appendChild(script); }