jQuery未在事件上触发函数

jQuery未在事件上触发函数,jquery,events,jquery-plugins,cordova,Jquery,Events,Jquery Plugins,Cordova,我的jQuery函数在使用事件调用时未触发 但是,如果我将我的函数放在事件之外,那么一切都可以完美地工作,并且没有错误 但是,如果我试图用事件触发它,特别是提交或单击,则不会发生任何事情,也不会出现任何错误 我正在使用Cordova,但在我的计算机上的测试服务器上测试时,同样的问题也会发生 我的科尔多瓦文件 编辑 因此,我在一个JSFIDLE中测试了该函数,所有功能都运行得很好。基本上,现在我知道我的函数按原样工作,但事件没有触发。想让每个人都知道。在注册事件处理程序以侦听事件之前,“devic

我的jQuery函数在使用事件调用时未触发

但是,如果我将我的函数放在事件之外,那么一切都可以完美地工作,并且没有错误

但是,如果我试图用事件触发它,特别是提交或单击,则不会发生任何事情,也不会出现任何错误

我正在使用Cordova,但在我的计算机上的测试服务器上测试时,同样的问题也会发生

我的科尔多瓦文件

编辑

因此,我在一个JSFIDLE中测试了该函数,所有功能都运行得很好。基本上,现在我知道我的函数按原样工作,但事件没有触发。想让每个人都知道。

在注册事件处理程序以侦听事件之前,“deviceready”事件是否会发生?可能在$(document).ready()回调中太晚了

我不喜欢科尔多瓦的,因为他们的建议相互矛盾。一方面,它们告诉您在添加事件侦听器之前等待DOM准备就绪,但随后它们展示了一个在加载DOM之前在头部添加侦听器的示例

这种方法有点冗长,但如果您有一个竞争条件,deviceready有时在$(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>

var haveGeoLocation,isDomReady;
文件。添加的监听器(“deviceready”,OnDeviceraddy,false);
函数ondevicerady(){
navigator.geolocation.getCurrentPosition(onSuccess,onError);
}
成功时的功能(位置){
//触发我的功能
haveGeoLocation=true;
configLoginSubmit();
}
函数onError(错误){
警报('code:'+error.code+'\n'+'消息:'+error.message+'\n');
}
//将从onSuccess和$(document).ready()调用configLoginSubmit()
//但在两个州都满意之前,他不会尝试这件事。
函数configLoginSubmit(){
if(isDomReady和haveGeoLocation){
$(“#登录”).submit(函数(){
$(this.login();
});
}
}
$(文档).ready(函数(){
isDomReady=true;
configLoginSubmit();
}

为什么在
$(文档)之后有两个开头的
{
s.ready(function()
?这是一个错误。使用了一个代码清理器,并认为我捕获了所有内容。感谢我的推荐--甚至还有一个很好的用于Sublime Text 2(或3)的插件。如果修复该错误没有帮助,请尝试在所有回调中放置警报,并查看哪些会触发,哪些不会…我理解您的意思。如果我使用的是jQuery,则不会
$(document).ready()
是否需要首先调用?使用Cordova时会产生混淆,因为必须首先调用
设备ADY
。基本上,您可以初始化非jQuery函数的jQuery吗?
(function ($) {
    $.fn.extend({
        login: function()
        {
            alert("yes");
        }
    });
})(jQuery);
<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>