批次查詢地址經緯度

HTML

<h1>批次查詢地址經緯度</h1>
<hr/>
<div class="first">
  <p>Google API 有限制每日查詢次數,若已超過當日限制,請自行修改下方API KEY</p>
  API KEY: <input type="text" placeholder="API KEY" value="AIzaSyDcyMmOXzS4zBjfkAtkGdp0rjWBoj3Wsss">
  <input type="button" value="開始使用">
</div>
<form class="second" action="#" method="post">
  <label class="block">請輸入地址,每個地址一行:</label>
  <textarea type="text" rows="10" cols="60" name="address"></textarea>
  <div>
    <input type="submit" value="Go!" class="submit" />
    <input type="reset" value="Reset" class="" />
  </div>
</form>
<div class="result">
  <div class="progress"><span class="current"></span> / <span class="total"></span> (<span class="percent"></span>%)</div>
  <table class="list">
    <thead>
      <tr>
        <th>地址</th>
        <th>Lat</th>
        <th>Lng</th>
        <th>Result</th>
      </tr>
    </thead>
    <tbody></tbody>
  </table>
  <div class="progress"></div>
  <div class="progress"><span class="current"></span> / <span class="total"></span> (<span class="percent"></span>%)</div>
</div>

CSS

body,
        html,
        form,
        div {
          margin: 0;
          padding: 0;
          border: 0
        }
h1 { font-size:large; }        
        body {
          font-family: Arial;
          border: 0 none;
          padding: 5px 20px;
        }
        
        .progress {
          margin: 10px
        }
        .list {width:100%; }
        .result {
          display: none;
        }
        
        input,
        textarea {
          padding: 5px
        }
        
        label.block {
          display: block
        }
        
        .submit {
          width: 300px;
          margin: 10px
        }
        
        .second {
          display: none
        }

JavaScript

$('.first').on('click', 'input:button', function(e) {
  var key = $(this).prev().val();
  if (!key) {
    return alert('請提供 API KEY');
  }

  $(e.delegetTarget).text('loading...');

  var url = 'https://maps.googleapis.com/maps/api/js?callback=initMap&key=' + encodeURIComponent(key);
  $('<scr' + 'ipt/>').attr('src', url).prependTo('body');
});


window.initMap = function() {
  $('.first, .second').toggle('slow');
  var geocoder = new google.maps.Geocoder()
  $('form').find('input:reset').click(function() {
      $('table.list tbody').empty();
      $('.result').hide();
    })
    .end().submit(function(e) {
      e.preventDefault();
      var txt = $('textarea', this);
      var input = $('input', this);
      if (txt.val() == '') return !1;
      var addrs = txt.val().split('\n');
      if (geocoder && addrs.length > 0) {
        $('.result').show();
        txt.attr('disabled', !0);
        input.attr('disabled', !0);
        var len = addrs.length;
        $('.total').text(len);
        $('.current,.percent').text(0);
        var retry = 3;
        setTimeout(function() {
          var fn = arguments.callee;
          if (addrs.length == 0) {
            input.attr('disabled', !1);
            txt.attr('disabled', !1).val('');
            return;
          }
          var address = addrs.shift(0);

          function callback(results, status) {
            $('.current').text(len - addrs.length);
            $('.percent').text(Math.floor((len - addrs.length) / len * 10000) / 100);
            var skip = typeof results == typeof(1);
            if (!skip) {
              if (status == google.maps.GeocoderStatus.OK) {
                retry = 3;
                console.log(results);
                var point = results[0].geometry.location;
                $('table.list tbody').append(
                  ["<tr><td>", address, "</td><td>", point.lat(), "</td><td>", point.lng(), "</td><td>成功</td></tr>"].join('')
                );
              } else {
             ...