js 变量 问题。。

cooc123 发布于 2012/03/15 17:50
阅读 654
收藏 0
$(document).ready(function() {
	$("form").submit(function(e) {
		$(".btn").attr('disabled','disabled');
		var flag = true;
		$(":text").each(function() {
			if ($(this).val() == '') {
				$(this).css({"border" : "1px solid #ff0000"});
				flag = false;
			}
		});

		if (flag) {
			$.post("install.php?key", $(this).serialize(), function(result) {
				if(result != 1){
					$("#msg").html(result);
					$(".btn").removeAttr('disabled');
					flag = false; // 这里怎样把 flag设置为 flase;
				}
			});
		}
		return flag;
	});
});


加载中
1
答复哈
答复哈

引用来自“JustForFly”的答案

$(document).ready(function() {
	$("form").submit(function(e) {
		$(".btn").attr('disabled','disabled');
		//var flag = true;
		$(":text").each(function() {
			if ($(this).val() == '') {
				$(this).css({"border" : "1px solid #ff0000"});
				return false;
			}
		});

		$.post("install.php?key", $(this).serialize(), function(result) {
			if(result != 1){
				$("#msg").html(result);
				$(".btn").removeAttr('disabled');
				return false;
			}else{
				return true;
			}
		});
	});
});

看这样是不是也可以实现你的功能。

什么叫做异步?在你使用ajax前,必须先搞明白这个.不然出现这种问题,你都不知道从何改起.

jQuery的$.post默认是异步提交,在执行到$.post时,只是将请求发送出去,而不会等待执行function(result)里的代码,所以会直接跳过去执行reture flag.

懂了原理,改起来就简单了,两种方法,一个是将post改为同步提交,参照jQuery.ajax的async参数;一个是在form提交前就获取到"install.php?key"返回值,可以将事件监听到button按钮上,而不是submit.

0
Z.han
Z.han
post异步,改同步试试!
0
cooc123
cooc123

引用来自“Z.han”的答案

post异步,改同步试试!
如果同步,还不如直接提交给PHP了,没必要用ajax了
Z.han
Z.han
那你这个返回值有什么用?
0
Andre.Z
Andre.Z

先检测输入值,再ajax检测,都通过,再提交,是吧。
把你的submit按钮变成普通的按钮,事件不是附加到form上,改附加到这个按钮。ajax的回调里面如果通过的话,函数触发form的submit。
form不要onsubmit事件,用普通按钮,回调决定是否提交表单。你异步的话,得搞清楚事件发生的顺序。

0
南宫仟秋
南宫仟秋

引用来自“Andre.Z”的答案

先检测输入值,再ajax检测,都通过,再提交,是吧。
把你的submit按钮变成普通的按钮,事件不是附加到form上,改附加到这个按钮。ajax的回调里面如果通过的话,函数触发form的submit。
form不要onsubmit事件,用普通按钮,回调决定是否提交表单。你异步的话,得搞清楚事件发生的顺序。

+1

不用form

0
cooc123
cooc123

引用来自“Andre.Z”的答案

先检测输入值,再ajax检测,都通过,再提交,是吧。
把你的submit按钮变成普通的按钮,事件不是附加到form上,改附加到这个按钮。ajax的回调里面如果通过的话,函数触发form的submit。
form不要onsubmit事件,用普通按钮,回调决定是否提交表单。你异步的话,得搞清楚事件发生的顺序。

你这样说明白了,

在执行ajax的时候 同时也执行了  return flag; 而ajax里面的  flag = false; 就没起到作用是这样的吗

Andre.Z
Andre.Z
是的
0
JustForFly
JustForFly
$(document).ready(function() {
	$("form").submit(function(e) {
		$(".btn").attr('disabled','disabled');
		//var flag = true;
		$(":text").each(function() {
			if ($(this).val() == '') {
				$(this).css({"border" : "1px solid #ff0000"});
				return false;
			}
		});

		$.post("install.php?key", $(this).serialize(), function(result) {
			if(result != 1){
				$("#msg").html(result);
				$(".btn").removeAttr('disabled');
				return false;
			}else{
				return true;
			}
		});
	});
});

看这样是不是也可以实现你的功能。
Andre.Z
Andre.Z
表单的提交,和你的ajax异步,会同时执行的。
Andre.Z
Andre.Z
兄弟,完全不行啊。你这个输入检测一过,就提交了,那个ajax异步检测毫无意义了。
0
JustForFly
JustForFly

引用来自“答复哈”的答案

引用来自“JustForFly”的答案

$(document).ready(function() {
	$("form").submit(function(e) {
		$(".btn").attr('disabled','disabled');
		//var flag = true;
		$(":text").each(function() {
			if ($(this).val() == '') {
				$(this).css({"border" : "1px solid #ff0000"});
				return false;
			}
		});

		$.post("install.php?key", $(this).serialize(), function(result) {
			if(result != 1){
				$("#msg").html(result);
				$(".btn").removeAttr('disabled');
				return false;
			}else{
				return true;
			}
		});
	});
});

看这样是不是也可以实现你的功能。

什么叫做异步?在你使用ajax前,必须先搞明白这个.不然出现这种问题,你都不知道从何改起.

jQuery的$.post默认是异步提交,在执行到$.post时,只是将请求发送出去,而不会等待执行function(result)里的代码,所以会直接跳过去执行reture flag.

懂了原理,改起来就简单了,两种方法,一个是将post改为同步提交,参照jQuery.ajax的async参数;一个是在form提交前就获取到"install.php?key"返回值,可以将事件监听到button按钮上,而不是submit.

这个说得有道理,建议使用jQuery.ajax的async=false,

或者,将事件监听到button按钮上,然后在异步得到结果后,决定是否执行document.getElementById("form_id").submit();

因为,就算按你说的,可以修改前面的flag也没有意义,因为,可能在你异步修改flag之前,flag就已经返回了。

返回顶部
顶部