|
| 1 | +var data = <%== @data %>; |
| 2 | +var random_id = (Date.now() + Math.random()).toString().replace('.', '-') |
| 3 | +document.write('<div class="gaia-selects" id="gaia-selects-' + random_id + '"></div>'); |
| 4 | +var main = function() { |
| 5 | + var selects = $('#gaia-selects-' + random_id); |
| 6 | + var city = $('<select>').attr('id', 'gaia-city-select-' + random_id) |
| 7 | + var dist = $('<select>').attr('id', 'gaia-dist-select-' + random_id) |
| 8 | + var zipcode = $('<input type="text">').attr('id', 'gaia-zipcode-' + random_id) |
| 9 | + |
| 10 | + var script = document.currentScript || selects.parent().find('script')[0]; |
| 11 | + var params = { |
| 12 | + city_input: script.getAttribute('city-input') || 'city', |
| 13 | + dist_input: script.getAttribute('dist-input') || 'dist', |
| 14 | + zipcode_input: script.getAttribute('zipcode-input' || 'zipcode'), |
| 15 | + zipcode_value: script.getAttribute('zipcode-value' || ''), |
| 16 | + city_value: script.getAttribute('city-value' || ''), |
| 17 | + dist_value: script.getAttribute('dist-value' || ''), |
| 18 | + zipcode_prefix: script.getAttribute('zipcode-prefix'), |
| 19 | + disable_zipcode: script.getAttribute('disable-zipcode') |
| 20 | + } |
| 21 | + city.attr('name', params['city_input']); |
| 22 | + dist.attr('name', params['dist_input']); |
| 23 | + |
| 24 | + zipcode.attr('name', params['zipcode_input']); |
| 25 | + zipcode.val(params['zipcode_value']); |
| 26 | + zipcode.attr('placeholder', '郵遞區號') |
| 27 | + |
| 28 | + var selected_city = params['city_value']; |
| 29 | + var selected_dist = params['dist_value']; |
| 30 | + var dist_name_with_zipcode = !(params['zipcode_prefix'] == 'false'); |
| 31 | + var disable_zipcode_input = params['disable_zipcode'] == 'true' |
| 32 | + |
| 33 | + // bind events |
| 34 | + city.on('change', function() { |
| 35 | + dist.trigger('reset'); |
| 36 | + if(city.val() == '') return; |
| 37 | + var cell = data.filter(function(cell) { return cell.city.name == city.val(); })[0]; |
| 38 | + cell.dists.forEach(function(dist_obj) { |
| 39 | + var text = dist_name_with_zipcode ? dist_obj.zipcode + ' ' + dist_obj.name : dist_obj.name; |
| 40 | + dist.append($('<option>', { |
| 41 | + 'value': dist_obj.name, |
| 42 | + 'text': text |
| 43 | + }).attr('data-zipcode', dist_obj.zipcode)); |
| 44 | + }) |
| 45 | + }); |
| 46 | + |
| 47 | + dist.on('reset', function() { |
| 48 | + dist.html('<option>請選擇鄉鎮區</option>') |
| 49 | + }); |
| 50 | + |
| 51 | + dist.on('change', function() { |
| 52 | + if(disable_zipcode_input || dist.val() == '') return; |
| 53 | + var zipcode_value = dist.find(':selected').attr('data-zipcode'); |
| 54 | + zipcode.val(zipcode_value); |
| 55 | + }); |
| 56 | + |
| 57 | + // insert city select |
| 58 | + city.append('<option>請選擇城市</option>') |
| 59 | + dist.trigger('reset'); |
| 60 | + data.forEach(function(cell) { |
| 61 | + var city_name = cell.city.name; |
| 62 | + var selected = city_name == selected_city; |
| 63 | + city.append($('<option>', { |
| 64 | + 'value': city_name, |
| 65 | + 'text': city_name, |
| 66 | + 'selected': selected |
| 67 | + })); |
| 68 | + if(selected) { |
| 69 | + city.trigger('change'); |
| 70 | + if(selected_dist != '') { |
| 71 | + dist.find('[value=' + selected_dist + ']').attr('selected', true); |
| 72 | + dist.trigger('change'); |
| 73 | + } |
| 74 | + } |
| 75 | + }); |
| 76 | + |
| 77 | + selects.append($('<div>').addClass('gaia-cities').append(city)); |
| 78 | + selects.append($('<div>').addClass('gaia-dists').append(dist)); |
| 79 | + if(!disable_zipcode_input) { |
| 80 | + selects.append($('<div>').addClass('gaia-zipcode').append(zipcode)); |
| 81 | + } |
| 82 | + $('#gaia-selects-' + random_id).parent().trigger('gaia-loaded') |
| 83 | +} |
| 84 | +<%= render partial: 'templates/load_jquery' %> |
0 commit comments