2016-04-15 4 views
0

У меня есть следующий HTML вид:Заполняем поля ввода на форме представить

<form action="http://.../index.php/timer/start_timer" class="start_timer" id="start_timer" method="post" accept-charset="utf-8"> 
    <input type="hidden" name="shift_id" value="290"> 
    <input type="hidden" name="latitude" id="latitude"> 
    <input type="hidden" name="longitude" id="longitude"> 
    <input type="submit" value="Start"> 
    </form> 

На submit нажатия кнопки, я хотел бы задать значения для latitude и longitude полей и приступить к действию на мой контроллер.

Описание: JavaScript Функция: lat и long.

function startStopTimerSubmit(){ 

    navigator.geolocation.getCurrentPosition(foundLocation, noLocation); 

} 

function foundLocation(position){ 

    var lat = position.coords.latitude; 
    var long = position.coords.longitude; 
    document.getElementById('latitude').value = lat; 
    document.getElementById('longitude').value = long; 

} 

function noLocation() 
{ 
    alert('Could not find your location. Please, try again.'); 
} 

Что бы наиболее reasonalbe способ заполнить значения (js и jQuery ОК), а затем продолжить с логикой?

Любая помощь или руководство очень ценятся.

+0

определение функции в другой функции является плохой практикой. –

+0

Правильно и спасибо. Это обновление. Однако правильный способ решения этого вопроса по-прежнему находится под вопросом. – WpDoe

+0

@MilindAnantwar - Нет, это не так. Это основная особенность JS, используемая для определения области обзора. – Quentin

ответ

2

Существует не очень хороший способ сделать это.

Поскольку getCurrentPosition асинхронный, единственный способ сделать это было бы:

  1. Предотвратить по умолчанию представить поведение на
  2. Trigger функция асинхронной
  3. Заполняем поля в функции обратного вызова
  4. Trigger подготовка формы с использованием JavaScript

Было бы проще просто попробовать t o заполнять поля при загрузке страницы, чтобы к моменту заполнения формы данные были там.

0

Вы можете проверить, было ли заполнено поле до продолжения вложенной функцией. Это как-то вроде как ...

function submit() { 
 
    var latField = $('.lat-field'); 
 
    
 
    getLatLng(function(lat, lng) { 
 
     latField.val(lat); 
 
     latField.hasValue = true; 
 
     submit(); //call submit again now value has been populated 
 
    }); 
 
    
 
    //dont proceed if value has not been set 
 
    if(!latField.hasValue) return; 
 
    
 
    //Your standard functionality here 
 
}

Смежные вопросы