Android + PhoneGap + jQuery Validate - not firing

Android + PhoneGap + jQuery Validate - not firing

本文关键字:not firing jQuery PhoneGap Android Validate      更新时间:2023-09-26

我正在使用jQuery Mobile和jQuery Validate。我有多个表单,一旦所有页面都完成,就会使用 ajax 序列化发布。

下面的"下一步"按钮适用于从本机浏览器访问的iOS和Android。当我使用 PhoneGap 打包并在 Android 上运行时,验证不会触发。其他一切正常。

如果我删除 valid() 条件,按钮将按预期工作。所以这一定是我如何使用jQuery Validate的问题。

我尝试过以各种方式改变事物的顺序。我试过:

if (!$("#infofm").valid()) {

if($("#infofm").valid()) {

始终相同的结果 - 在本机浏览器中有效,但在 PhoneGap 之后则不然。我已经为此苦苦挣扎了很长时间。下面是相关代码。任何帮助将不胜感激。谢谢!

$(function(){ 
    $('a#nxt1').bind('click', function(event, ui) {
        infoval();
    });
function infoval(){
    var isvalidate=$("#infofm").valid();
    if(isvalidate) {
        $.mobile.changePage('#towertop', {transition: 'slidefade'});
    } else {
        alert("Please fill in all fields on this page before proceding");
    }
};
$(document).ready( function(){ 
$("#infofm").validate({ errorPlacement: function(error, element) {} }); });

<a href="" id="nxt1" data-iconpos="bottom" data-theme="a" data-icon="arrow-r">Next Step</a>
我相信

对于jQuery Mobile,你需要使用....

$(document).on('pageinit', function(){

而不是

$(document).ready(function(){

请参阅:http://jquerymobile.com/demos/1.2.0/docs/api/events.html

重要:使用 $(document).bind('pageinit') ,而不是$(document).ready()

你在 jQuery 中学到的第一件事是调用 $(document).ready()功能,因此一切都将在 DOM 已加载。但是,在jQuery Mobile中,Ajax用于加载 导航时每个页面的内容进入 DOM,并且 DOM 准备就绪 处理程序仅对第一页执行。在任何时候执行代码 加载并创建新页面后,可以绑定到pageinit事件。

我的javaScript代码在捆绑到Phonegap应用程序中时没有被调用(在我的情况下是在iOS上)。我构建了一个具有多个屏幕和按钮的 Web 应用程序,这些屏幕和按钮根据用户交互进行隐藏或显示。

使用与XCode捆绑在一起的iOS模拟器时,您可以在Safari中看到生成的Web应用程序的源代码(在"开发"菜单下,必须在Safari首选项中启用开发人员工具)。在源代码中,我注意到我所有的应用程序 html 页面都合并为一个,唯一包含的 javascript 来自第一页(默认索引.html) - 页面中的所有其他元素都已从文件中删除。所以我改变了

    $(document).ready(function(){ 
       ...
    });

    $(document).on('pageinit', function(){
       ...
    });

(感谢Sparky,上面的回答)并将以下页面中的所有jquery js代码添加到index.html中。例如,我添加了以下行以隐藏其中一个页面上的div:

    $("#cancelButtonDiv").hide();

现在正在执行代码,并且正在正确调用我的按钮上指定的方法。