ユーザーが住所を入力する単純なフォームがあります。
フォームを送信する前に、Places Api を使用して TextSearch を実行し、このデータをフォームの非表示の入力フィールドに入れて送信します。
jQuery Validate を使用してフォームを検証したいのですが、Places データを一緒に取得する方法がわかりません。
Validate で submitHandler を使用する必要があると思いますが、コードをここに配置する方法がわかりません。
$("#myform").validate({
submitHandler: function(form) {
form.submit();
}
});
Validate プラグインを使用していないコードは次のとおりです。
<!DOCTYPE html>
<html>
<head>
<title>Maps Test</title>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
html { height: 100% }
body { height: 100%; margin: 0; padding: 0 }
#map_canvas { height: 100% }
</style>
<script type="text/javascript"src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?libraries=places&sensor=false"></script>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
var map;
var service;
var infowindow;
var service;
var validated = false;
function initialize() {
var pyrmont = new google.maps.LatLng(-33.8665433,151.1956316);
map = new google.maps.Map(document.getElementById('map_canvas'), {
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: pyrmont,
zoom: 15
});
service = new google.maps.places.PlacesService(map);
}
function textsearchcallback(results, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
var place = results[0];
var request = {
reference: place.reference
};
service.getDetails(request, getdetailscallback);
} else {
alert("ERROR: NO RESULTS FOUND!");
}
}
function getdetailscallback(place, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
$("#placeinfo").val(JSON.stringify(place));
validated = true;
$("#search-form").submit();
validated = false;
$("#placeinfo").val("");
} else {
alert("ERROR");
}
}
function validateForm() {
var searchfield = $("#search-field").val();
if (searchfield == null || searchfield == "") {
alert("Please enter address");
return false;
}
if (validated) {
return true;
} else {
var request = {
query: searchfield
};
service.textSearch(request, textsearchcallback);
return false;
}
}
</script>
</head>
<body onload="initialize()">
<form id="search-form" name="input" action="html_form_action.asp" method="get" onsubmit="return validateForm()">
<input autocomplete="off" placeholder="Address, Airport or Postcode..." id="search-field" size="50" type="text"><br>
<input type="hidden" name="placeinfo" id="placeinfo">
<input type="SUBMIT" value="Search" /><br>
</form>
<div id="map_canvas" style="width:600px; height:400px"></div>
</body>
</html>
編集:
ここに作業コードのフィドルがあります:http://jsfiddle.net/robertdodd/txqnL/26/