2013-09-02 9 views
0

Функция jQuery не запускается при вызове с событием.Функция jQuery не запускается при событии

Если я поставил свою функцию за пределы мероприятия, все работает отлично, и ошибок нет.

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

Я использую Кордову, но при тестировании на тестовом сервере на моем компьютере возникают те же проблемы.

Мой Кордова Doc

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> 
<html> 
<head> 
    <!-- Load jQuery--> 
    <script src="js/jquery.min.js" type="text/javascript"></script> 

    <!-- Load My JS Plugins --> 
    <script src="js/login.jQuery.js" type="text/javascript"></script> 

    <!-- jQuery Variables and other code used across the plugins--> 
    <script type="text/javascript"> 
    $(document).ready(function() 
     { 
      document.addEventListener("deviceready", onDeviceReady, false); 

      function onDeviceReady() 
      { 
       navigator.geolocation.getCurrentPosition(onSuccess, onError); 
      } 

      function onSuccess(position) 
      { 
      //Trigger My Functions 
      $("#login").submit(function() 
      { 
       $(this).login(); 
      }); 
      } 

      function onError(error) 
      { 
       alert('code: ' + error.code + '\n' + 'message: ' + error.message + '\n'); 
      } 
    } 
}); 
    </script> 
</head> 

<body> 
    <div id="deviceready"> 
     <div class="loginstuff"> 
      <form id="login"> 
       <h2>Login to your Account</h2> 
       <label>Username</label> 
       <input id="username"placeholder="Username" autocapitalize="off" autocorrect="off" type='text'> 
       <br> 
       <label>Password</label> 
       <input id="password" placeholder="********" type='password'> 
       <br> 
       <input type="submit" value="Login"> 
      </form> 
     </div> 
    </div> 
</body> 
</html> 

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

(function ($) { 
    $.fn.extend({ 
     login: function() 
     { 
      alert("yes"); 
     } 
    }); 
})(jQuery); 

EDIT

Так я тестировал функцию в jsFiddle и все работало отлично. В принципе, теперь я знаю, что моя функция работает так, как есть, но что событие не срабатывает. Хотел сообщить всем об этом.

+0

Почему существуют два открытия '{' s после '$ (документ) .ready (функция()' – Popcorn

+0

Это была ошибка?. использовал очиститель кода и думал, что поймал все. Спасибо – copilot0910

+0

Я рекомендую [jsHint] (http://www.jshint.com/) - есть даже хороший плагин для Sublime Text 2 (или 3). Если исправление этой ошибки не было «Помогите, попробуйте разместить предупреждения во всех обратных вызовах и посмотреть, какие пожары, а что нет ... – Popcorn

ответ

1

Может ли событие «deviceready» происходить до того, как ваш обработчик событий зарегистрирован для прослушивания события? Может быть, находясь внутри обратного вызова $ (document) .ready(), слишком поздно?

Мне не нравится documentation Cordova, потому что у них есть противоречивые советы. С одной стороны, они говорят вам подождать от DOM, чтобы быть готовыми, прежде чем добавлять слушателя событий, но затем они показывают пример с добавлением слушателя в HEAD до загрузки DOM.

Этот подход немного длинный, но если у вас есть условие гонки, где девицериады иногда срабатывают до $ (document) .ready(), это может быть рабочим решением.

Вы можете попробовать что-то подобное в вашей голове тега:

<head> 
<script type="text/javascript"> 
var haveGeoLocation, isDomReady; 

document.addEventListener("deviceready", onDeviceReady, false); 

function onDeviceReady() { 
    navigator.geolocation.getCurrentPosition(onSuccess, onError); 
} 

function onSuccess(position) { 
    //Trigger My Functions 
    haveGeoLocation = true; 
    configLoginSubmit(); 
} 

function onError(error) { 
    alert('code: ' + error.code + '\n' + 'message: ' + error.message + '\n'); 
} 

// configLoginSubmit() will be called from both onSuccess and $(document).ready() 
// but will not attempt it's business until both states are satisfied. 
function configLoginSubmit() { 
    if (isDomReady && haveGeoLocation) { 
    $("#login").submit(function() { 
     $(this).login(); 
    }); 
    } 
} 

$(document).ready(function() { 
    isDomReady = true; 
    configLoginSubmit(); 
} 
</script> 
</head> 
+0

Я понимаю, что вы говорите. Если я использую jQuery, не' $ (document) .ready() «Нужно быть первым, что называется?» Путаница исходит от использования Кордовы, где «девицери» s, который также будет называться первым. В принципе, вы можете инициализировать функцию jQuery без jQuery? – copilot0910

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