html用户登陆成功怎么加alert,解决js代码中加入alert()就成功执行,不加就不对的问题!...

本文探讨了JavaScript中setTimeout函数的工作原理,特别是在异步处理和DOM操作中的应用。解释了为何在某些情况下,使用alert能解决异步问题,并提到了在类中使用setTimeout时this的作用域问题。此外,还讨论了如何使用setTimeout模拟setInterval的功能。最后,通过示例展示了如何在AJAX异步请求中处理返回结果,以及如何确保在DOM就绪后执行特定代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于return false的做用域在each循环中,它只起到告终束当前循环的做用,至关于break,并无返回任何类型的值php

转众多网友意见html

问题:jquery

我是作一个回车事件处理,翻页的那种,在一个页面上成功了,换到另外两个页面上就出错了。反正就是跳到1,若是加上alert(),就跳转成功。ajax

可能状况: 这种状况通常出如今 alert() 以后的某个代码须要页面元素进入必定的状态才能使用,json

加上 alert() 以后,至关于页面元素有足够的时间进入必定的状态了,若是肯定你的代码没有问题,服务器

你能够把 alert() 以后的代码放到一个 setTimeout 的函数中,也就是停一会再运行下面的代码,app

应该就没问题了。dom

解决办法:异步

这文章帮我解决了今天烦了半天的东西--类中使用的this+setTimeout。转载过来了。async

setTimeout (表达式,延时时间)

setTimeout(表达式,交互时间)

延时时间/交互时间是以豪秒为单位的(1000ms=1s)

setTimeout 在执行时,是在载入后延迟指定时间后,去执行一次表达式,仅执行一次

setTimeout 在执行时,它从载入后,每隔指定的时间就执行一次表达式

1,基本用法:

执行一段代码:

var i=0;

setTimeout("i+=1;alert(i)",1000);

执行一个函数:

var i=0;

setTimeout(function(){i+=1;alert(i);},1000);

//注意比较上面的两种方法的不一样。

下面再来一个执行函数的:

var i=0;

function test(){

i+=1;

alert(i);

}

setTimeout("test()",1000);

也能够这样:

setTimeout(test,1000);

总结:

setTimeout的原型是这样的:

iTimerID = window.setTimeout(vCode, iMilliSeconds [, sLanguage])

setTimeout有两种形式

setTimeout(code,interval)

setTimeout(func,interval,args)

其中code是一个字符串 func是一个函数.

注意"函数"的意义,是一个表达式,而不是一个语句. 好比你想周期性执行一个函数

function a(){

//...

}

可写为

setTimeout("a()",1000)

setTimeout(a,1000)

这里注意第二种形式中,是a,不要写成a(),切记!!!

展开来讲,无论你这里写的是什么,若是是一个变量,必定是一个指向某函数的变量;

若是是个函数,那它的返回值就 要是个函数

2,用setTimeout实现setInterval的功能

思路很简单,就是在一个函数中调用不停执行本身,有点像递归

var i=0;

function xilou(){

i+=1;

if(i>10){alert(i);return;}

setTimeout("xilou()",1000);

//用这个也能够

//setTimeout(xilou,1000);

}

3,在类中使用setTimeout

终于到正题了,其实在类中使用你们遇到的问题都是关于this的,只要解决了这个this的问题就万事无忧了。 呵呵。让咱们来分析一下:

function xilou(){

//by 西楼冷月 www.chinacms.org

this.name="xilou";

this.sex="男";

this.num=0;

}

xilou.prototype.count=function(){

this.num+=1;

alert(this.num);

if(this.num>10){return;}

//下面用四种方法测试,一个一个轮流测试。

setTimeout("this.count()",1000);//A:当下面的x.count()调用时会发生错误:对象不支持此属性或方法。

setTimeout("count()",1000);//B:错误显示:缺乏对象

setTimeout(count,1000);//C:错误显示:'count'未定义

//下面是第四种 by 西楼冷月 www.chinacms.org

var self=this;

setTimeout(function(){self.count();},1000);//D:正确

}

var x=new xilou();

x.count();

错误分析:

A:中的this其实指是window对象,并非指当前实例对象

B:和C:中的count()和count其实指的是单独的一个名为count()的函数,但也能够是window.count(),由于window.count()能够省略为count()

D:将变量self指向当前实例对象,这样js解析引擎就不会混肴this指的是谁了。

话说回来,虽然咱们知道setTimeout("this.count()",1000)中的this指的是window对象,但仍是不明白为何会是

window对象^_^(有点头晕...)

那咱们能够想象一下这个setTimeout是怎样被定义的:

setTimeout是window的一个方法,全称是这样的:window.setTimeout()

那应该是这样被定义的:

window.setTimeout=function(vCode, iMilliSeconds [, sLanguage]){

//.....代码

return timer//返回一个标记符

}

因此当向setTimeout()传入this的时候,固然指的是它所属的当前对象window了。

==============================================

须要alert后代码能够生效是由于dom对象的时间问题。

若咱们在执行完上一行代码后,稍等片刻再开始执行下一行代码,那么咱们的问题就解决了。

最简单的办法,延尺执行:

window.setTimeout("document.getElementById('headserch').focus();",10); //DOM对象超时不能设置焦点

当我把这句话延迟 了十毫秒来执行,肉眼是分辨不出来的。但机器能够。因而就解决了DOM对象时间同步,而不能再执行下面的代码。

用ajax得到数据,但是页面显示的时不加个alert就显示不出来,随意加个alert就能够 解决办法

这是由于Ajax的异步处理的引发的 只须要把jQuery中的$.ajaxSettings.async = false;

就能够了 默认为true;

AJax能够经过两种方法访问服务器,即同步(脚本会停留并等待服务器发送回复而后再继续) 和 异步(脚本容许页面继续基进程并处理可能的回复)

/*

【异步提交返回处理结果】

Ajax获取结果

*/

function ajax_GetJsonData() {

$.ajaxSettings.async = false;

$.ajax({

type: "POST", //用POST方式传输

dataType: "json", //数据格式:JSON

url: 'IMenu.aspx', //目标地址

data: "action=getmenu",

beforeSend: function () { }, //发送数据以前

complete: function () { }, //接收数据完毕

error: function (XMLHttpRequest, textStatus, errorThrown) { alert(errorThrown); },

success: function (msg) {

$("#menutdiv").empty();

$("测试").appendTo("#menudiv");

}

});

}

function CheckForm(){

if($("#username").val() == ''){

$("#warnning").html("ERROR");

return false;

}

return CheckUserName(); //这里的返回值不起做用

}

function CheckUserName(){

var username = $("#username").val();

$.get("b.php",{ name:username},

function (data){

if(data == 1){

$("#warnning").html("Account is used.");

return false; //这里是返回给CheckUserName()的吗?

} else {

$("#warnning").html("You can register.");

return true; //这里是返回给CheckUserName()的吗?

}

}

);

}

CheckForm()这个函数是表单验证的;CheckUserName()是判断用户名是否存在的,存在的时候return false,不存在的话return true,为什么这里的return true/false没效果呢?

逻辑没弄清楚,要将ajax设置为同步的,须要使用$.ajax,$.get默认是异步的,而且不是在回调函数内return,而是在CheckUserName函数中申明一个变量来接受回调函数的返回值,而后CheckUserName返回这个值。

function CheckForm(){

if($("#username").val() == ''){

$("#warnning").html("ERROR");

return false;

}

return CheckUserName(); //这里的返回值不起做用

}

function CheckUserName(){

var username = $("#username").val();

var result=false;

$.ajax({async:false//要设置为同步的,要不CheckUserName的返回值永远为false

,url:'b.php',data:{name:username}

,success:function(data){

if(data == 1){

$("#warnning").html("Account is used.");

result=false;

} else {

$("#warnning").html("You can register.");

result=true;

}

}});

return result;//==========这里才是CheckUserName的返回值,回调函数返回值没有意义

}

jquery的方法默认都是返回jquery的对象,你在ajax的方法中返回对象也是枉然。只能用变量或是其余东西存储起来。

默认异步的,不会等待ajax方法执行完了了才执行下面的代码。因此有时候也是不能获得值的,要改为“同步”

也能够用$("div").data("result", true);获得值用$("div").data("result")

若是要异步又要获得值,能够考虑用setTimeout重复执行获得值的代码,直到获得值为止

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值