2013-06-05 8 views
0

Как я могу получить доступ к переменной, которая находится внутри функции jQuery, ниже приведен код. Мне нужно внутри var lat, lng для хранения в скрытом поле или ярлыке на более позднем этапе. Я пробовалjQuery Как получить доступ к функции var внутри функции

<script type="text/javascript"> 

    if (navigator.geolocation) 
    { 
     navigator.geolocation.getCurrentPosition(showPosition); 
    } 
    else{x.innerHTML="Geolocation is not supported by this browser.";} 

    var x = null; 

    function showPosition(position) { 
     var lat = position.coords.latitude; 
     var lng = position.coords.longitude; 

     x+= lat; 
     alert(lat+ " " +lng); 
    } 
/* 
    * I have tried this way for testing */ 
    alert(x); 
</script> 

Значение для x не определено.

+2

Добро пожаловать в удивительный мир ** асинхронном **! Вы не можете этого сделать. – SLaks

+0

Чем больше я читаю ваш код, тем меньше я его понимаю. Что такое x? –

+0

@roasted x - это просто глобальная переменная –

ответ

1

При запуске вашего кода alert(x) запускается сразу. Это означает, что в браузерах, поддерживающих GeoLocation x, еще не было возможности быть установленным, и именно поэтому вы получаете сообщение undefined.

Способ сделать это:

var x = 0; 

if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(showPosition, error); 
} else { 
    test(); // call other function or display error message 
} 

function showPosition(position) { 
    var lat = position.coords.latitude; 
    var lng = position.coords.longitude; 
    x += lat; 
    test(); 
} 

function error(){ 
    console.warn('ERROR(' + err.code + '): ' + err.message); 
} 

function test() { 
    alert(x); 
} 

Похоже, что вы имеете копию и вставить код из W3Schools так что вы получите undefined ошибку, если navigator.geolocation не true, как x не элемент DOM, поэтому он не имеет свойства innerHTML.

В приведенном выше коде test(); используется для отображения всплывающего окна со значением x. В вашем коде test(); должна быть следующая функция, которую вы хотите запустить. Например, это может быть функция, которая извлекает данные на основе текущего местоположения пользователя (если доступно).

ОБНОВЛЕНИЕ: Вот пример заполнения скрытых полей данными.

var lat = 0, lng = 0; 
function showPosition(position) { 
    lat = position.coords.latitude; 
    lng = position.coords.longitude; 
    test(); 
} 

Затем используйте:

HTML:

<input type="hidden" id="latInput" /> 
<input type="hidden" id="lngInput" /> 

JS:

function test(){ 
    $("#latInput").val(lat); 
    $("#lngInput").val(lng); 
} 

// or 

function test(){ 
    $.post("your-script.php", { lat: lat, lng: png }) 
    .done(function(data) { 
     // success 
    }) 
    .fail(function() { 
     // fail 
    }); 
} 
+0

его работа! Как я могу получить доступ к тесту функции в скрытом поле или метке для хранения в БД. –

+0

разве это не так, как мой предыдущий код, я хочу получить доступ к var lat и lng для хранения в моей БД на стороне сервера. Я пробовал этот var some = test(); ничего не показывает –

+0

@VenkaYeluri - я только что обновил его несколькими примерами, они должны решить вашу проблему. – Joe

1

Объявите переменную lat, lng вне боковых функций, тогда вы сможете получить к ней доступ в коде после объявления. Прежде чем обращаться к ним, вы должны вызвать функцию showPosition.

var lat, lng; 
function showPosition(position) { 
    lat = position.coords.latitude; 
    lng = position.coords.longitude; 

    x+= lat; 
    alert(lat+ " " +lng); 
} 
+0

. Я тоже пробовал этот путь .. «undefined» –

+2

Вы должны сначала вызвать функцию перед ее доступом. – Adil

+0

@VenkaYeluri - если браузер, который вы используете, не поддерживает геолокацию, тогда ваша функция не будет вызываться, а переменные будут неопределенными. – Joe

0

Вы должны вызвать функцию showPosition() перед вами alert(x) потому х заполняется только тогда, когда функция вызывается.

+0

Не могли бы вы привести пример –

1

Попробуйте этот код:

http://jsfiddle.net/sqZmU/

(function() { 


    var x = ""; 

    function showPosition(position) { 
     var lat = position.coords.latitude; 
     var lng = position.coords.longitude; 

     x += lat; 
    } 

    if (navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(showPosition); 
    } else { 
     x = "Geolocation is not supported by this browser."; 
    } 
    /* 
    * I have tried this way for testing */ 
    $('button').on('click',function(){ 
     alert(x); 
    }); 

})(); 
+0

появляется пустое всплывающее окно msg –

+0

Я вижу msgBox, так как вы определили x = "", поэтому он выглядит пустым msgBox –

+0

ya, похоже, что SLaks прокомментировал это, это работает асинхронно. Таким образом, единственный способ - использовать его внутри функции showPosition() или вызвать его позже. Я скоро обновлю ответ –

0

Первая вещь, вы должны вызвать функцию showPosition, чтобы увидеть его эффект.

Во-вторых, не пытайтесь получить доступ к переменной x вот так. Вместо этого вы можете вернуть значение, необходимое для этой функции.

+1

проблема с вашей работой заключается в том, что функция 'showPosition' не была вызвана. Вы использовали функцию 'alert'. Вы уверены, что была вызвана функция «alert» в 'showPosition'. Вместо функции «alert» я предпочитаю функцию console.log, и вы можете просмотреть журнал, используя ** консоль ** браузера. – Ramsharan

1

Я думаю, что было бы лучше вернуть значение x, используя его как local variabel используя var x внутри позиции показа функции.

+0

Я пробовал это, функция showPosition (позиция) { var lat = position.coords.latitude; return lat; } var x = "showPosition (position)"; предупреждение (x); –

+0

@joe его не работает. –

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