0

我正在使用带有 jQ​​uery Validate 的 jQuery Mobile。完成所有页面后,我有多个使用 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>
4

2 回答 2

0

我相信对于 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事件。

于 2013-01-25T20:26:15.380 回答
0

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

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

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

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

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

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

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

于 2013-03-26T08:51:32.133 回答