我在执行以下代码时遇到一些问题。
代码提交但它没有做任何事情,它返回到同一个屏幕,似乎表单的值没有被提交。
<script type="text/javascript">
$(document).ready(function(){
$("#signin_form").validate({
debug: false,
rules: {
///
},
messages: {
///
},
submitHandler: function(form) {
var result;
$.post('test.php', $('#signin_form').serialize(), function(data){
result = $.parseJSON(data);
if (result.flag == 'false'){
$('#results').show()
}
})
.success(function(data){
if (result.flag == 'true'){
form.submit();
}
}, 'json');
}
});
});
</script>
如果我将代码更改为以下内容,它可以工作,它会将我带到正确的屏幕,但我需要验证,验证码,我不确定它是否是正确的地方,我尝试使用beforeSubmit,但后来验证验证码。
<script type="text/javascript">
$(document).ready(function(){
$("#signin_form").validate({
debug: false,
rules: {
///
},
messages: {
///
},
submitHandler: function(form) {
form.submit();
}
});
});
</script>
有一些关于$ .post的东西,我不反感......并且没有提交信息。
有谁知道它可能是什么? 谢谢!
答案 0 :(得分:5)
您无需更改form
提交的用于验证验证码的方式,使用remote
中的jquery.validate
功能。
remote
与jquery.validate
的使用存在一些问题。检查您是否执行了以下操作:
1)请确保您仅使用 jQuery 版本 1.6.1 及以上版本。
2)使用“synchronous”选项进行远程执行(默认为异步)并执行此操作将async
参数设置为false。
假设这是我的表格......
的 HTML:强> 的
将id
和name
属性添加到所有表单元素或只是验证码(这个必须同时包含)。
<form id="signin_form" action="save.php" method="POST">
Enter captcha: O1S2C3A4R
<br/>
<input type="text" id="captcha" name="captcha" value=""/>
<input type="submit" id="save" name="save" value="Save"/>
</form>
的 jQuery的:强> 的
添加type
,async
和data
个参数。最后一个参数将captcha值传递给 check.php 文件,这就是该元素需要id
属性的原因。然后,您就可以使用此选择器$('#captcha')
。
(对我来说这样更好但你也可以使用其他选择器类型按名称调用元素)
要知道,您还需要为remote
定义错误消息,在这种情况下,我使用无效验证码。
$(document).ready(function(){
$("#signin_form").validate({
rules: {
captcha: {
required: true,
remote: {
url:"check.php",
type:"post",
async:false,
data: {
/* this is the name of the post parameter that PHP will use: $_POST['captcha'] */
captcha: function() {
return $.trim($("#captcha").val());
}
}
}
}
},
messages: {
captcha: {
required: "*",
remote: "Invalid captcha"
}
}
});
});
PHP:check.php
此时,使用"true"
或"false"
作为 字符串 来了解jquery.validation
插件非常重要验证码是否有效。在这种情况下,如果验证码等于 O1S2C3A4R ,那么它是有效的,在客户端,您将看到submit
将处理form
}到html save.php
form
属性中指定的action
文件。
<?php
$captcha = $_POST['captcha'];
if($captcha == "O1S2C3A4R"){
echo "true";
} else {
echo "false";
}
?>
这样,您可以毫无问题地验证整个form
,并远程检查验证码值,而无需更改插件功能。
此外,您可以一起测试所有这些代码,看看它是否有效: - )
希望这有帮助。
答案 1 :(得分:2)
使用Javascript:
<script type="text/javascript">
$(document).ready(function(){
$("#signin_form").validate({
rules: {
captcha: {
remote: {
url: "remote.php"
}
}
}
},
messages: {
captcha: {
remote: "Please enter the text in the captcha."
}
}
});
});
</script>
HTML表单:
<form id="signin_form">
<input type="text" name="captcha">
<input type="submit">
</form>
PHP:
$response = $_GET['captcha'];
$answer = 'captcha_answer';
if($response==$answer){
echo 'true';
} else {
echo 'false';
}
很抱歉将这部分推到答案中 - 我不允许发表评论:
请注意,将“async”参数设置为false会锁定您的页面,直到您收到响应,这可能不是您想要的。验证库应该阻止正常的表单提交,如果它正在等待远程验证的响应,至少在较新的版本中(我使用的是jQuery 1.7.2和验证1.10.0)。
IIRC jQuery Validate库会将除精确字符串“true”以外的任何内容视为错误。这可以用于根据拒绝原因传递不同的自定义消息。 json_encode添加了额外的引号,导致jQuery Validate将其视为自定义错误消息。