我目前正在开发一个移动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
调用初始化。在第一个成功完成的调用中,插件创建了一个绑定到表单的验证器,并缓存验证器。在第二次调用中,我需要它将一个新的验证器绑定到新的表单,而不是将旧的验证器(绑定到旧表单)返回给我。
您是否尝试将所有验证JS拉入一个'validate.js'文件,确保链接到所有需要它的页面上的此文件?这样,当显示第一个登录页面时,所有的JS都会被加载,并会在整个其他页面中保留下来,并且会根据需要提供。 – adamdehaven 2013-03-21 12:02:57
'jquery.validate.min.js'已经加载。 JQM将脚本和css加载到第一页,然后当它更改页面时,它仅注入现有页面上的内容。头部中的脚本似乎被缓存,但无论如何,我在每个页面中都复制了每个脚本标记。 – 2013-03-21 13:12:28
我不是说每个页面都会插入'validate'插件。我的意思是,包含你可能需要的每个页面的代码,(例如'$(“#id_index_form”)。validate({.....'用于其他文件中的每个验证规则/方法,以及链接到这个JS文件在每个页面上都有意义吗? – adamdehaven 2013-03-21 14:03:08