Как сделать так, чтобы все остальные функции останавливались, пока пользователь не разрешит или не заблокирует навигатор.геолокация в Jquery?

Я делаю форму sign_up, в которой пользователь сначала сообщает нам о местоположении, а затем заполняет другое поле формы .

Но трудность приходит, когда пришло сообщение о том, что веб-сайт хочет знать расположение разрешить или заблокировать . Другая функция все еще работает . Я хочу, чтобы пользователь не мог заполнить форму и нажать в другом месте, пока он/она не выберет, разрешить или заблокировать . Но в моем коде пользователь может делать что угодно, ничего не выбирая .

Мой jquery для местоположения похож на это, но функция работает по-другому .

$(document).ready(function() {

  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(successFunction, errorFunction);
  }

  //Get the latitude and the longitude;
  function successFunction(position) {
    var lat = position.coords.latitude;
    var lng = position.coords.longitude;
  }

  function errorFunction() {
    alert("You have blocked us to know your location . You can't be a journalist without that ...");
    window.location.href = 'index.php';
  }

  $(".input").change(function() {
    log(this);
  });

  function log(element) {
    var text = element.val();
    console.log(text);
  }

  $('.button_sign').click(function() {
    log(this);
    log('.input');
    alert(lat);
    alert(lng);
  });

});

Мой html выглядит как

<form>
          <div class="field">
            <input type="text" class="input" id="name_register" placeholder="Name">
            <div id="name_error" class="error_field"></div>
          </div>
          <div class="field">
            <input type="email" class="input" id="email_register" placeholder="Email">
            <div id="email_error" class="error_field"></div>
          </div>
          <div class="field">
            <input type="password" class="input" id="password_register" placeholder="Password">
            <div id="pass_error" class="error_field"></div>
          </div>
          <div class="field">
            <input type="text" id="date_register" class="input" placeholder="DOB">
            <div id="date_error" class="error_field"></div>
          </div>
          <p class="agree"><input type="checkbox" name="checkbox" value="check" id="agree_register" checked/> I have read and agree to the Terms and Conditions and Privacy Policy</p>
          <a  class="button_sign" id="sign_up">Sign up</a>
               </form>

Поэтому моя проблема заключается в том, чтобы остановить все другие функции, пока расположение пользователя не будет заблокировано или разрешено . И спрашивать местоположение следует сначала перед любой другой функцией .

1 ответ

  1. Логическое значение можно использовать для хранения того, разрешен ли доступ к нему. Попробуйте что-нибудь подобное.

    var didMakeLocationDecision = false;
    
    $(document).ready(function() {
      if (navigator.geolocation) {
        didMakeLocationDecision = true;
        navigator.geolocation.getCurrentPosition(successFunction, errorFunction);
      }
    
      //Get the latitude and the longitude;
      function successFunction(position) {
        var lat = position.coords.latitude;
        var lng = position.coords.longitude;
      }
    
      function errorFunction() {
        alert("You have blocked us to know your location . You can't be a journalist without that ...");
        window.location.href = 'index.php';
      }
    
      $(".input").change(function() {
        log(this);
      });
    
      function log(element) {
        var text = element.val();
        console.log(text);
      }
    
      $('.button_sign').click(function() {
        log(this);
        log('.input');
        alert(lat);
        alert(lng);
      });
    
    });
    
    $(document).click(function(e) { 
        if (e.button == 0 && !didMakeLocationDecision) {
            e.preventDefault();
            errorFunction();
        }
    });