如图,小弟想要实现当我点击发送手机验证码的时候,先判断图形验证码,正确的话点击确定按钮就可以触发发送手机验证码,错误的话就不能触发发手机验证码,(现在如图出现的问题,当我点击发送手机验证码按钮的时候,能判断验证码,但同时也发送了手机验证码(这不是我想要的效果)。)第一次发帖,不懂规则,有错的地方请谅解谢谢!
解决方案 »
- 100分求助,如何在ASP.NET2.0中把GridView中的数据导出到excel文件中?
- Microsoft ActiveSync连接出错
- 。NET的XML问题
- 项目调试时出现如下错误,有谁知道是哪的事啊?
- 请教DataGrid模版列的显示问题(如何用<ItemTemplate>中的lable显示出<EditItemTemplate>中的droplist选定的项)
- 求救!!!!我做的论坛发帖完后为什么要重新刷新一下页面才能显示我发的帖子(代码附下)
- 求一个上传图片前预览的代码
- 谢谢了。。帮我写写注释~~~
- 已经做了一半的项目,重装系统以后考过来,可以继续开发吗?是否需要新建个项目,再将其一点点考过来?
- 急!!!应用程序中发生了未经处理的异常。如果单击“继续”。。。
- dataset里的排序和repeter绑定顺序不一样
- 推荐类似表格的资料录入插件
<script type="text/javascript">
//发送验证码
function yanzheng() { var phone = $("#uname").val(); //手机用户
var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/;
var upass = $("#upass").val(); //左边是本地页面的名称,右边是文本框的名称
var kapmap = $("#kapmap").val();
var schoolAdress = $.trim($("#xuexiao").val());
if (!myreg.test(phone)) {
alert('请输入有效的手机号码!');
$("#uname").focus();
return false;
}
else if (upass == "") {
alert("请设置密码!");
$("#upass").focus();
}
else if (schoolAdress == "") {
alert("请搜索你的学校!");
$("#xuexiao").focus();
}
else if (kapmap == "") {
alert("请输入验证码!");
$("#kapmap").focus();
} else {
jiaoyan()
fun(); //多少秒重发
yanzhengma();
var ma = $("#ma").val(); //随机生成手机验证码
//地址栏
var friend = unescape(window.location.search).split("^")[1];
$.post("ashx/yangzhengma.ashx", { phone: phone, ma: ma, friend: friend }, function (msg) {
if (msg == "rest") {
alert("该手机号已注册,请重新输入手机号!");
}
if (msg == "feifa") {
alert("您的邀请好友注册链接失败,请重新获取");
window.location.href = 'member.aspx';
}
if (msg == "chaochu") {
alert("很抱歉,您发送手机验证码已经超过3次,注册失败,有问题请咨询校园一元购客服:0773-3560936"); } });
} } function jiaoyan(returnval) {
var kapmap = $("#kapmap").val(); if (kapmap == "") {
alert("验证码不能为空!");
$("#kapmap").focus();
return false;
}
$.post("yanzhengma/jiaoyanma.ashx", { kapmap: kapmap }, function (msg) {
if (msg == "ok") {
window.location.href = 'ceshi.aspx'
}
else if (msg == "no") {
alert("验证码错误或者已经过期!");
return returnval;
} }); }
var timer = null;
var i = 60;
function fun() {
$("#show").attr("disabled", "true"); //按扭禁用
$("#show").attr("value", i + "秒后可重发");
timer = setInterval("show()", 1000); //设置定时器,1000ms调用一次show()
} function show() {
i--;
if (i == 0) {
$("#show").attr("disabled", null); //还原按扭
$("#show").attr("value", "发送验证码");
i = 60;
clearInterval(timer); //清除定时器
} else {
$("#show").attr("value", i + "秒后可重发"); //数字变化
}
}
function yanzhengma() {
var ma = "";
for (var y = 0; y < 6; y++) {
ma = ma + Math.floor(Math.random() * 10);
}
$("#ma").val(ma);
} </script>
你的 jiaoyan 函数,它只要一执行,立刻就返回值了。然后才会执行 yanzhengma/jiaoyanma.ashx。所以你写的 return returnval 语句毫无意义。我不知道你的 javascript 是何时、在哪里学的。这里的技术点就是“回调”。你的 jiaoyan 函数要设计为回调形式,也就是function jiaoyao(callback)
{
.................
$.ajax(......., function(msg)
{
if(成功)
callback(true);
else
callback(false);
});
...........这样的逻辑形式。那么你的 yanzheng 函数中也不能写
jiaoyan()
fun(); //多少秒重发
yanzhengma();
..................
而应该写成类似
jiaoyan(function(yesno)
{
if(yesno)
{
fun(); //多少秒重发
yanzhengma();
......................
}
});这种回调形式。也就是说,你的流程应该分为“两阶段”地异步执行,而不能是顺序的流程。当jiaoyan 函数没有回调,那么yanzheng的第一阶段就结束了;直到jiaoyan 的回调被调起,并且仅当验证通过时,yanzheng的第二阶段函数才被执行。因此 yanzheng 流程要分为两个阶段,从细节着手编写程序流程,绝非在一个函数中顺序完成。
其实你贴代码太多了,大部分比较了解编程的人不爱看一大篇代码的问题,而爱在论坛上看一大篇代码的人又可能不能回答你的问题。所以,既然你自己发现是“函数返回值问题”,那就说明你有一些意识到流程问题,那就仔细、反复调试,不要把“几天”时间浪费在无意义的思考上,你只要动手调试就会发现 jiaoyan 函数总是在实际调用对应的 ashx 文件之前就执行完毕、执行到 fun() 代码了。贴出你的调试信息,让人准确地看到你关注点在这里,就能有效地沟通。反之如果贴出一大篇代码,那就跟某些博客似地了,看似一大堆相互转抄来的、把别人文章拼凑成“自己的博客”的高大上的文章,而实际上有效果的文章很少。