如何终止正在运行的script程序

JK_10000 2002-11-06 09:52:11
<script>
//JK想在c函数里出现某种情况时就终止所有将要运行的script,请大侠援手
//请只修改c函数
//谢谢

function a(){
b();
alert("没有达到目的!");
}
function b(){
c();
}
function c()
{

//请在这里加一段scritp代码

}

a();

</script>
...全文
469 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
JK_10000 2002-11-08
  • 打赏
  • 举报
回复
在这一个问题没有解决之前,JK要求其他写程序的人不要将NaN值填入应该输入数值的输入框里。照说这个要求应该不算苛刻,他们(Coding人员)也能接受,到现在也没有出岔子。
至少至少这个问题是个隐患,JK希望消除这个隐患,看来这个希望是要落空的了

多谢多谢
soloxiao 2002-11-08
  • 打赏
  • 举报
回复
同意,onestab(┼─),c()只提供返回值(true or false)
方工 2002-11-08
  • 打赏
  • 举报
回复
c函数是JK写,但是用c函数的人却不一定是JK
事先总的有个约定吧?应当由c的调用者决定是否继续。
JK_10000 2002-11-08
  • 打赏
  • 举报
回复
Solo:
现在的问题是:
c函数是JK写,但是用c函数的人却不一定是JK,JK不希望在告诉别人用这个函数的时候还要附加很多条件。

原题见这一贴:http://expert.csdn.net/Expert/topic/1092/1092742.xml?temp=.6329157
里面还有一个问题没有解决:有可能发生抢焦点的死循环(如该贴说明的第一条)
将那个问题进行精简,就成了这一贴的问题

hehe
欢迎继续关注
JK_10000 2002-11-08
  • 打赏
  • 举报
回复
Xiao:
不觉己有一年
诸兄弟可好!
soloxiao 2002-11-07
  • 打赏
  • 举报
回复
宽哥:

我认为只修改c函数恐怕难以实现,但如果你的a(),b()撰写模式稍加修改,或许是一个好的方法,
看这样可不可以:
<script>
function a(){
if(!b())return;//在调用其他函数时判断结果
alert("没有达到目的!");
}
function b(){
c();
//return true;//如果此行略过则预设值为false
}
function c()
{

//请在这里加一段scritp代码

}

a();

</script>
JK_10000 2002-11-06
  • 打赏
  • 举报
回复
Go_Rush(阿舜) :关掉debugger是可以实现这样的功能的(它只是在状态栏里报错)。但是一方面要求别人关掉debugger是没道理的,另一方面如果别人开着debugger会给他们造成不便。再说这样做会影响公司形象的

Hehe
欢迎继续关注!
JK_10000 2002-11-06
  • 打赏
  • 举报
回复
onestab(┼─):
比如alert();confirm()等,它虽说不能永久终止其后的程序,但是它可以暂时推后在它后面的程序,为什么不能把这个暂时推到无穷呢。
JK认为,不论程序设计的常识到底有哪些,有用的并且实现起来不很难的功能都应该实现,如果没有实现的话,那只能说明设计这一种语言的人们还应该加油。
JK不肯定,但是希望Script是一种理想的程序,所以抱着试一试的心情来请教大家。

谢谢!欢迎继续关注!
Go_Rush 2002-11-06
  • 打赏
  • 举报
回复
debugger;
JK_10000 2002-11-06
  • 打赏
  • 举报
回复
回复人: JK_10000(JK1) ( ) 信誉:100 2002-11-06 11:30:00 得分:0
回复填错地方了,欢迎斑竹帮JK删掉,连同本留言
方工 2002-11-06
  • 打赏
  • 举报
回复
如果只修改被调用函数,而不修改调用函数和其他相关代码,企图在被调用函数中影响调用者的行为是不可能的,除非制造人为错误,中止所有script的运行。
这是程序设计的基本常识。
假如搂主的想法能够实现,程序设计的历史就要改写了。
JK_10000 2002-11-06
  • 打赏
  • 举报
回复
if (checknamestr(window.userform.text1.value) && checkpwdstr(window.userform.password1.value) && checkemailstr(window.userform.text2.value) && checkoicqstr(window.userform.text3.value) && checktelstr(window.userform.text4.value))

当checknamestr(window.userform.text1.value)返回的结果不是true时,if的条件肯定是false了,后面的也不会执行。
把checknamestr函数里的这一段
if (flagi==i)
{
alert("username successful!");
return;
}
里的return 改成return true再试一试
方工 2002-11-06
  • 打赏
  • 举报
回复
// 要靠你自己程序的逻辑来决定是否继续运行,例如
function a(){
if(!b()) return;
alert("没有达到目的!");
}
function b(){
if(!c()) return false;
// do something esle
return true;
}
function c()
{
//请在这里加一段scritp代码
if(some_thing_wrong) reutrn false;
//other code ....
return true; // normal exit;
}

a();
JK_10000 2002-11-06
  • 打赏
  • 举报
回复
runmin(*^_^*):
1."循环之外不能有break"是程序运行出错时MS Script Debugger说的,至于Switch算不算反例,JK也不大清楚。
2.return只能结束本函数的执行,不能终止script。在本例中,如果在c函数里加上一个return ,结果是alert("没有达到目的!");这一句仍会执行。

欢迎继续关注!
blues-star 2002-11-06
  • 打赏
  • 举报
回复
谁说循环之外不能有break;????

switch(a)
{
case "1": ;;break;
case "2": ;;break;
}

就是要出现某种情况结束吗?那就用一个对象记录状态,然后到某种状态的时候return不就完啦。
JK_10000 2002-11-06
  • 打赏
  • 举报
回复
xhbmj(我右边有★★★★★) :错误:循环之外不能有break
qiushuiwuhen(秋水无恨) :错误:例外被抛出且未被接住

由于事实上的我c函数会被很多地方用到,我不希望这个函数的使用需要附加条件
例如,秋水的方法需要在最外层的调用里加上try catch语句;在本例程序中,是在a函数里面加
qiushuiwuhen 2002-11-06
  • 打赏
  • 举报
回复
throw("hehe")
无爱大叔 2002-11-06
  • 打赏
  • 举报
回复
break;
JK_10000 2002-11-06
  • 打赏
  • 举报
回复
goldenlove(潇洒.net) :
先谢谢你的代码!
看了一下这段程序,它是通过function run_step2()调用自己实现循环,通过改变全局变量来实现是否还继续调用自己。不过我还是不能从它得到启发,也不能实现我最初的意图。

欢迎继续关注
潇洒 2002-11-06
  • 打赏
  • 举报
回复
这是在 csdn 看到的代码,(不记得是哪位老大写的了,抱歉!).
呵呵 不知这个对你有没帮助.....

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


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title></title>
</head>
<body>
<div id=ttText style="display:none">
程序运行中......<BR>
<span id=currentState></span>   <button onclick="CANCLE = true;">停止</button><BR>
</div>
<button onclick="run_step1()" id=button1>开始</button>
<span id=result></span>
<script>
var i=0;
var sum =0;
var CANCLE = false;
var max = 1000000; //循环的终点
var step = 9999; //步长:选择合适的步长可以在响应能力和计算速度上获得比较好的折衷。
//(步长用9999而不是10000只是为了显示的时候好看,其实都一样)
var timeStart = "";
function run_step1()
{
if (i == 0)timeStart = new Date();
ttText.style.display="";
button1.style.display="none";
setTimeout("run_step2()",20);
CANCLE = false;
}
function run_step2()
{
if (CANCLE)
{
ttText.style.display="none";
button1.style.display="";
button1.value="继续";
return;
}
if (i == null)
{
//初始化
//注意:这里不能写var,因为循环变量和结果都为全局变量。
i = 1;
sum = 0;
run_step2();
}
else if (i<=max)
{
var endValue = i+step;
if (endValue >max) endValue = max+1;
for (j=i; j<endValue ; j++)
sum += j;
i+=step;
currentState.innerText = i;
result.innerText = "临时结果:"+sum;
setTimeout("run_step2()",0);
}
else
{
run_step3();
}
}
function run_step3()
{
ttText.style.display="none";
button1.style.display="";
button1.value="重新开始";
result.innerText = "最终结果"+sum+" 用时:"+(new Date-timeStart)/1000+"秒"
sum = 0;
i = 0;
}
</script>
</body>
</html>
==================================================

87,777

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧