-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathjquery.zip2addr.js
110 lines (101 loc) · 2.83 KB
/
jquery.zip2addr.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/*
* jQuery.zip2addr
*
* Copyright 2010, Kotaro Kokubo a.k.a kotarok [email protected]
* Dual licensed under the MIT or GPL Version 2 licenses.
*
* https://github.com/kotarok/jQuery.zip2addr
*
* Depends:
* jQuery 1.4 or above
*/
$.fn.zip2addr = function(target){
var c = {
api: 'http://www.google.com/transliterate?langpair=ja-Hira|ja&jsonp=?',
prefectureToken: '(東京都|道|府|県)',
zipDelimiter: '-'
}
var cache = $.fn.zip2addr.cache;
var getAddr = function(zip,callback){
$.getJSON(c.api,{'text':zip},
function(json){
if(RegExp(c.prefectureToken).test(json[0][1][0])){
callback(json[0][1][0].replace(RegExp('(.*?'+c.prefectureToken+')(.+)'),function(a,b,c,d){return [b,d]}))
}
}
)
}
var fillAddr = (function(){
if(typeof target == 'object' && target.pref){
return function(addr){
var addrs = addr.split(',');
if(addrs){
if(!RegExp(addrs[1]).test($(target.addr).val())){
$(target.pref).val(addrs[0]);
$(target.addr).val(addrs[1]);
}
}else if(!RegExp(addrs[1]).test($(target.addr).val())){
$(target.pref).add(target.addr).val('');
}
}
}else{
return function(addr){
var addrStr = addr.replace(',','');
var addrField = target.addr || target;
if(addrStr){
if(!RegExp(addrStr).test($(addrField).val())){
$(addrField).val(addrStr);
}
}else if(!RegExp(addrStr).test($(addrField).val())){
$(addrField).val('');
}
}
}
})()
//From http://liosk.blog103.fc2.com/blog-entry-72.html
var fascii2ascii = (function() {
var pattern = /[\uFF01-\uFF5E]/g, replace = function(m) {
return String.fromCharCode(m.charCodeAt() - 0xFEE0);
};
return function(s){return s.replace(pattern, replace);};
})();
var check = function(_val){
var val = fascii2ascii(_val).replace(/\D/g,'');
if(val.length == 7){
if(cache[val] == undefined){
getAddr(val.replace(/(\d\d\d)(\d\d\d\d)/,'$1-$2'),function(json){
cache[val] = json;
fillAddr(json);
})
}else{
fillAddr(cache[val]);
}
}
}
this.each(function(){
var elem = $(this);
if(typeof target == 'object' && target.zip2){
elem.add($(target.zip2))
.bind('keyup.zip2addr change.zip2addr',function(){
check(elem.val()+''+$(target.zip2).val())
})
.bind('blur.zip2addr',function(){
$(this).val(function(){
return fascii2ascii($(this).val())
})
})
}else{
elem
.bind('keyup.zip2addr change.zip2addr',function(){
check(elem.val())
})
.bind('blur.zip2addr',function(){
$(this).val(function(){
return fascii2ascii($(this).val()).replace(/\D/g,'').replace(/(\d\d\d)(\d\d\d\d)/,'$1'+c.zipDelimiter+'$2')
})
})
}
});
return this;
};
$.fn.zip2addr.cache = {};