2

我目前正在开发一个移动html5项目。我正在使用this jQuery验证插件来验证具有表单的登录屏幕。我还使用jQuery Mobile和单页模板(我在不同的html文件中有页面,但是当更改页面时,JQM读取文件并将新页面内容注入DOM)。林迫使JQM以在应用程序的每个页面的变化重新加载页面:jQuery验证插件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事件再次被触发。控制台中没有错误。

有什么我失踪了吗?我怎样才能“重新启动”插件?也许它仍然认为前面的电话没有完成?

在此先感谢。


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

+1

您是否尝试将所有验证JS拉入一个'validate.js'文件,确保链接到所有需要它的页面上的此文件?这样,当显示第一个登录页面时,所有的JS都会被加载,并会在整个其他页面中保留下来,并且会根据需要提供。 – adamdehaven 2013-03-21 12:02:57

+0

'jquery.validate.min.js'已经加载。 JQM将脚本和css加载到第一页,然后当它更改页面时,它仅注入现有页面上的内容。头部中的脚本似乎被缓存,但无论如何,我在每个页面中都复制了每个脚本标记。 – 2013-03-21 13:12:28

+1

我不是说每个页面都会插入'validate'插件。我的意思是,包含你可能需要的每个页面的代码,(例如'$(“#id_index_form”)。validate({.....'用于其他文件中的每个验证规则/方法,以及链接到这个JS文件在每个页面上都有意义吗? – adamdehaven 2013-03-21 14:03:08

回答

1

解决:

什么hapenning:我不知道。我只知道这个插件绑定到一个表单,当validate被调用时,只要窗体在DOM中,它就保持绑定。它也缓存验证器,所以随后通过同一表单调用validate将返回相同的验证器。

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

+0

'.validate()'被称为_once_并且只有一次_initialize_特定的目标表单。一旦初始化,它不会再被调用。所以是的,如果您删除表单或添加其他表单,则需要重新初始化。 – Sparky 2013-03-21 16:01:10

+0

问题是如果您从DOM中删除表单,您将不再有ajax转换。这是给最终用户一种真实的本地应用程序的感觉。有没有其他方法来强制jQuery验证插件重新启动或重置验证器? – Ehsan 2014-09-11 17:22:04