JQM页面更改后jQuery验证插件无法正常工作

时间:2013-03-21 11:57:55

标签: javascript html5 web-applications jquery-mobile jquery-validate

我目前正在开发移动html5项目。我正在使用this jQuery验证插件来验证带有表单的登录屏幕。我也使用jQuery Mobile,单页模板(我在不同的html文件中有页面,但在更改页面时,JQM读取文件并将新页面内容注入DOM)。我强迫JQM在应用程序的每个页面更改中重新加载页面:

$.mobile.changePage("pageurl", {reloadPage: true});


第一页是登录界面,其中包含用户名和密码的简单表格。在第一次拍摄中一切顺利:如果按下提交按钮并且某些字段为空,则验证插件会抱怨。如果所有字段都正常并且按下了提交,我会对WS进行几次ajax调用,将数据保存在数据库中,然后显示下一页。

这是登录屏幕的代码:

    $(document).on("pageinit", "#login_screen", function() {  
        //This event fires every time we show this JQM "page".

        $("#id_index_form").validate({
            submitHandler : function(form) {
                user = form.user.value;
                password = form.psw.value;
                login(); 
            }
        });
    });

    function login(){
        //Calls the login WS  (ommited)

        //if login went ok, inject next page in DOM using ajax
        $.mobile.changePage("nextpage.html", {reloadPage: true});
    }

一个重要的事情是我无法使用表单内置机制,因此调用自定义login函数。

在下一个屏幕中,如果用户返回登录,我会再次更改页面:

$.mobile.changePage("login.html", {reloadPage: true});

现在验证插件不再起作用了。它没有验证,当按下提交时,表单被清除,没有任何反应。然而,mobileinit事件再次按预期被触发。控制台中没有错误。

有什么我想念的吗?我怎么能“重启”插件?也许它仍然认为之前的电话没有结束?

提前致谢。


更新:
我正在调试非缩小插件js文件,看起来问题是它在validate调用中执行的初始化。在第一次成功完成的调用中,插件创建了一个绑定到表单的验证器,并缓存验证器。在第二次调用中,我需要它将新的验证器绑定到新表单,而是返回旧的验证器(绑定到旧表单)。

1 个答案:

答案 0 :(得分:1)

解决:

什么是hapenning:我不知道。我所知道的是这个插件在调用validate时绑定到一个表单,并且只要表单在DOM中就保持绑定。它还缓存了验证器,因此通过同一表单对validate的后续调用将返回相同的验证器。

我做了什么:在转到下一页之前,我从DOM中删除了表单。