例如:
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
<script type="text/javascript">
$(document).ready( function() {
function is_valid( value )
{
// This is what I want to do, but this doesn't works.
return value == "Iamgood" && $.post( 'validatefield.php', 'fieldvalue=' + value, function (data) {
return data == "true";
});
}
$('#formtovalidate').bind( 'submit', function() {
if (is_valid( $('#field').val() ) return true;
return false;
});
});
</script>
<form id="formtovalidate" action="yes.php">
<input value="Iamgood" id="field" name="field"/>
<input type="submit" id="sendform" value="Send" />
</form>
答案 0 :(得分:1)
你不能这样做...因为你传递给post方法的函数是一个回调,它是在收到数据时执行的。
如果data =='true',你必须创建一个函数checkValid(value)来执行post和post回调调用valueIsOk(value)
答案 1 :(得分:0)
我认为您必须考虑采用不同的方法来解决这个问题。我不认为这是可能的,并且jQuery示例(http://api.jquery.com/jQuery.post/)似乎同意。该函数是异步的 - 它是一个回调函数,因此只要返回结果就会执行它(假定它是)。我没试过,但是我看到了你可以尝试的东西:
尝试在$ .post电话前加上:
$.ajaxSetup({async:false});
您是否愿意采用其他方式来做到这一点?我不知道你的情况,所以这可能会或可能不会起作用:
<script type="text/javascript">
$(document).ready( function() {
var isValid = false;
var postValid = false;
function is_valid( value )
{
if (value == "Iamgood") isValid = true;
$.post( 'validatefield.php', 'fieldvalue=' + value, function (data) {
postValid = true;
$('#formtovalidate').submit();
});
}
$('#formtovalidate').bind( 'submit', function() {
if (!isValid || !postValid) {
is_valid( $('#field').val() );
return false;
} else return true;
});
});
</script>
<form id="formtovalidate" action="yes.php">
<input value="Iamgood" id="field" name="field"/>
<input type="submit" id="sendform" value="Send" />
</form>
答案 2 :(得分:0)
它根本不起作用的第一个原因是因为你没有阻止将表单发布到yes.php。我建议您将按钮的类型更改为“按钮”,使用“onclick”调用isValid,如果有效,则发布到yes.php。
或许是一种更优雅的方式:
<input type="submit" id="sendform" value="Send" onclick="javascript: return isValid()" />
并删除isValid函数中的输入参数,而不是在函数本身中确定'Iamgood'的值。
答案 3 :(得分:0)
$(document).ready( function() {
function is_valid( value )
{
var returnval;
// use $.ajax instead and use async:false (not a good practice)
$.post( 'validatefield.php', {fieldvalue:value}, function (data) {
if(data)
returnval="true";
else
returnval = "false";
});
if(returnval)
{
switch (returnval)
{
case "true":
return true;
break;
case "false":
return false;
break;
}
}
else
return false;
}
$('#formtovalidate').bind( 'submit', function(e) {
e.preventDefault();
if (is_valid( $('#field').val() ) return true;
else
return false;
});
});
在你的php文件中
$value = $_POST['fieldvalue'];
//do processing
if($value)
echo "true";
else
echo "false";
<强> P.S 强>
这个问题对我来说并不明显,而且代码未经测试但仍可以尝试