【棘手,bug要日清】如何知道客户端事件处理函数都已经执行完毕? 如果引发hA的动作是一个asp:button,那么肯定会引发postback,可以考虑使用input type="button" ,这样不会引发回发 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 方法1:直接在hD中触发postback方法2:定义一个全局标记变量complete=false在hD中改变标记变量的值complete=true在hA中出发settimeout来监控complete的变化来触发postback不知是否用的上,看看是否还有其他办法. 检查asp.net控件的autopostback是否设置为true了 其实你完全可以考虑在postback后的服务器代码里面去处理你说的事件啊 我说明两点1、textboxA引发的postback是我的代码主动调用的,不存在是服务器端控件本身引起的postkack2、我说的那些事情必须要客户端做,如果能在服务器端做,当然好了。可惜业务上不行啊。 myvicy的方法似乎可行,我也这样考虑过,唯一觉得不妥的地方就是使用settimeout似乎不妥吧?因为我不知道要延时多长时间。 myvicy的方法似乎可行,我也这样考虑过,唯一觉得不妥的地方就是使用settimeout似乎不妥吧?因为我不知道要延时多长时间。 我觉得也只有这个方法可行了,不过不是全局变量,而是建立对应的状态数组,哪个控件的事件执行完了就更改对应的状态,然后使用setTimeout来检查状态数组,看是否都已经完成,完成则postback给个大概的模型给你<html> <head> </head><body><form></form> <script>setInterval(CKStatus,100);var Status=["textA:0","textB:0","textC:0"];function CKStatus(){ for(var i=0;i<Status.length;i++) { if(Status[i].split(':')[1]=="0") return;//未完成则直接退出 } document.forms[0].submit();//提交第一个表单}//下面测试用的,更改状态,3秒左右提交表单//更改状态在执行完你的事件后调用SetStatus函数,参数为你的状态标志setTimeout("SetStatus('textA')",1000);setTimeout("SetStatus('textB')",2000);setTimeout("SetStatus('textC')",3000);function SetStatus(ID){ for(var i=0;i<Status.length;i++) { if(Status[i].split(':')[0]==ID) { Status[i]=ID+":1";//===== return; } }}</script></body></html> 根据楼主的需求好象不用树状模型的.<script>var complete = false;function ha(){//执行代码t1=setInterval(checkStatus,100);}function hb(){//执行代码}function hc(){//执行代码}function hd(){ complete = true;}function checkStatus(){ if(complete){ clearInterval(t1);//清除 ;//do submit }}</script> 控件怎么才能知道本身的客户端事件处理函数执行完了呢?---你的单个事件执行完了设置和这个事件对应的状态为完成检查是否都完成由setInterval执行的函数来检查状态数组,都完成时则提交表单,有未完成的则return退出函数体,防止表单提交 AJAX相关的执行顺序问题?很诡异! Jquery,如何去掉文本框中重复的数组数值 有谁有js教程啊? javascript dom对象添加问题 在html中 div的id如何可以设置为动态变化的? 怎样把一个网址的源代码显示在textarea中。 IE4.0里的window.close()--在线等待.. 不用嵌入式框架,只在一个页面上,怎么做出嵌入式框架的JAVASCRIPT效果(就是在页面上的特定位置有水平和垂直滚动条)来?肯定要用到层。 怎样让页面只弹出一个窗口,不会重复弹出窗口?? js 如何获取gif文件的时长? 如何获取第一个子元素对象??? 求助这个JS怎么写
方法2:
定义一个全局标记变量complete=false
在hD中改变标记变量的值complete=true
在hA中出发settimeout来监控complete的变化来触发postback不知是否用的上,看看是否还有其他办法.
1、textboxA引发的postback是我的代码主动调用的,不存在是服务器端控件本身引起的postkack
2、我说的那些事情必须要客户端做,如果能在服务器端做,当然好了。可惜业务上不行啊。
我觉得也只有这个方法可行了,不过不是全局变量,而是建立对应的状态数组,哪个控件的事件执行完了就更改对应的状态,然后使用setTimeout来检查状态数组,看是否都已经完成,完成则postback给个大概的模型给你
<html>
<head>
</head>
<body>
<form>
</form>
<script>
setInterval(CKStatus,100);
var Status=["textA:0","textB:0","textC:0"];
function CKStatus()
{
for(var i=0;i<Status.length;i++)
{
if(Status[i].split(':')[1]=="0")
return;//未完成则直接退出
}
document.forms[0].submit();//提交第一个表单
}
//下面测试用的,更改状态,3秒左右提交表单
//更改状态在执行完你的事件后调用SetStatus函数,参数为你的状态标志
setTimeout("SetStatus('textA')",1000);
setTimeout("SetStatus('textB')",2000);
setTimeout("SetStatus('textC')",3000);
function SetStatus(ID)
{
for(var i=0;i<Status.length;i++)
{
if(Status[i].split(':')[0]==ID)
{
Status[i]=ID+":1";//=====
return;
}
}
}
</script>
</body>
</html>
<script>
var complete = false;
function ha(){
//执行代码
t1=setInterval(checkStatus,100);
}
function hb(){
//执行代码
}
function hc(){
//执行代码
}
function hd(){
complete = true;
}
function checkStatus(){
if(complete){
clearInterval(t1);//清除
;//do submit
}
}
</script>
---你的单个事件执行完了设置和这个事件对应的状态为完成检查是否都完成由setInterval执行的函数来检查状态数组,都完成时则提交表单,有未完成的则return退出函数体,防止表单提交