我目前正在开发移动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
调用中执行的初始化。在第一次成功完成的调用中,插件创建了一个绑定到表单的验证器,并缓存验证器。在第二次调用中,我需要它将新的验证器绑定到新表单,而是返回旧的验证器(绑定到旧表单)。
答案 0 :(得分:1)
解决:
什么是hapenning:我不知道。我所知道的是这个插件在调用validate
时绑定到一个表单,并且只要表单在DOM中就保持绑定。它还缓存了验证器,因此通过同一表单对validate
的后续调用将返回相同的验证器。
我做了什么:在转到下一页之前,我从DOM中删除了表单。