Проблемы с доступом к значениям в формах с помощью jquery - PullRequest
1 голос
/ 12 января 2012

Я пишу инструмент, который берет введенный пользователем адрес и преобразует его в геолокацию для API GoogleMaps.

Редактировать: Я хочу отправить данные формы,хотя .. я думаю.Я не уверен, что отправка формы необходима, но конечный результат заключается в том, что она должна создать сообщение в WordPress, содержащее значения title, address и geo.по кнопке отправки работает правильно, если убраны теги <form></form>.Если теги <form> находятся вокруг формы, метод все равно будет вызываться, но он ничего не геокодирует.Я неправильно настроил форму?

Вот форма:

$title = $_POST['title'];
$address = $_POST['address'];

$new_post = array(
     'post_title' => $title,
     'post_content' => 'This is my post.',
     'post_status' => 'publish',
     'post_type' => 'post',
     'address' => $address,
     'geo' => $geo,
  );

$post_id = wp_insert_post($new_post);

update_post_meta($post_id, 'address', $address, true);
update_post_meta($post_id, 'geo', $geo, true);  

?>

<?php get_header()?>

    <label>Event: </label><input id="title"  type="text"/>
    <label>Address: </label><input id="address"  type="text"/>
    <div id="map_canvas" style="width:500px; height:500px"></div><br/>
    <label>latitude: </label><input id="latitude" type="text"/><br/>
    <label>longitude: </label><input id="longitude" type="text"/><br/>
    <input type="submit" id="compute" onClick="getCoordinates()" value="lets try it">

    <input type="hidden" name="action" value="new_post" />
    <?php wp_nonce_field( 'new-post' ); ?>


<?php get_footer()?>

Вот соответствующая функция:

function getCoordinates() {
//variables are set up on page initialization   
    geocoder.geocode( { 'address': $('#address').val() }, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        map.setCenter(results[0].geometry.location);
        alert ('latitude: ' + results[0].geometry.location.lat() + ' longitude: ' + results[0].geometry.location.lng());
        $('#latitude').val( results[0].geometry.location.lat() ) ;
        $('#longitude').val( results[0].geometry.location.lng() ) ;
        $geo =  results[0].geometry.location.lat() + "," + results[0].geometry.location.lng();
        var marker = new google.maps.Marker({
        map: map,
        position: results[0].geometry.location

      });
      }
      });
}

Ответы [ 2 ]

0 голосов
/ 12 января 2012

Когда элементы используются, рекомендуется связать эту функцию геокодирования с событием onsubmit для этого.

<form onsubmit="getCoords()">
...fields...
</form>
<script>
function getCoords(){

geocoder.makeALongRequest("some","params",function(result,data,xhr){
  alert("this is the request callback");
  });

//Always return false in the onsubmit event if you want to stop the browser from trying to POST anything
return false;
}
0 голосов
/ 12 января 2012

Измените кнопку ввода с type = "submit" на type = "button" и оставьте теги формы выключенными.Вы используете форму с кнопкой отправки внутри только тогда, когда хотите действительно отправить форму, а не выполнять действие только для javascript.

...