Javascript停止执行中止或退出

时间:2012-03-23 06:05:39

标签: javascript html

if(a.value==1 && b.value==2)
{
    try{callFunc()  }catch(e) {} 
}
frm.submit();

function callFunc()内,我需要写什么才能完全停止执行? 它不应该执行frm.submit();

function callFunc()
{
    //stop execution here -- ensure it won't execute fm.submit()
}

8 个答案:

答案 0 :(得分:3)

更好的是

function Abort()
{
   throw new Error('This is not an error. This is just to abort javascript');
}

比从任何地方调用

try
{
    for(var i=0;i<10;i++)
    {
         if(i==5)Abort();
    }
} catch(e){}

为你

function callFunc()  
{      
    //stop execution here 
    Abort();

    } 

//code from where you are going to call

try
{
  if(a.value==1 && b.value==2)    
  {        
   callFunc()   
  }    
  frm.submit(); 
}
catch(e) {}

答案 1 :(得分:1)

更好的方法是这样:

if(a.value==1 && b.value==2)
{
  try{
    callFunc();  
    frm.submit();
  }
   catch(e) {
    // stop execution
  } 
}

如果函数callFunc中抛出异常,则不会执行frm.submit();行。相反,它将跳到catch子句

答案 2 :(得分:1)

正如您所发现的,中止JavaScript几乎总是涉及异常。如果你真的无法改变包装器,那么你可能不得不诉诸一些更极端的东西。杀死脚本的一种(恶意)方法是通过运行无限循环来说服浏览器花费太长时间:

function callFunc()
{
    //stop execution here
    var n = 1;
    while (n) {
        n += 1;
    }
}

现代浏览器会让用户在一段时间后终止脚本。当然,它会使您的网站看起来破碎,但这应该为您提供获得更好的API所需的杠杆。

如果繁忙循环过于极端,您可以使用基于插件的睡眠替换简单添加,或者使用包含在其自己的try / catch安全网中的非常长时间的同步网络请求。

答案 3 :(得分:1)

我明白你要做什么。你不想杀死Javascript解释器,你只是想阻止表单提交继续进行。

HTML

<form id="myForm">
  …
</form>

的Javascript

// Setup…
var frm = document.getElementById('myForm'),
    a = { value: 1 },
    b = { value: 2 };

// Can change this code
var callFunc = function() {
    // Throwing will do nothing here, since
    // exceptions are being caught in a try/catch

    // Instead, let's overwrite the submit handler with one that
    // will cancel the form submission, then restore the old handler
    var oldSubmitHandler = frm.submit;
    var killHandler = function(e) {
        // Prevents the submission
        e.preventDefault();

        // Restores the old handler
        frm.submit = oldSubmitHandler;
    };
    frm.submit = killHandler;
};

// Can't change any of this code
if(a.value==1 && b.value==2)
{
    try { callFunc() } catch(e) { } 
}

// Want to stop this from happening
frm.submit();

查看实际操作:http://jsfiddle.net/3A7xC/

答案 4 :(得分:0)

很多答案,还有一个很有趣。

你可以把代码放在一个函数中,让try块抛出一个错误,然后从catch子句返回:

function foo() {
    var a = {value:1};
    var b = {value:2};

    if(a.value==1 && b.value==2) {

       try {
          callFunc();

       } catch(e) {
          alert(e.message);
          return;
       }
    }
    alert('error didn\'t stop me!');
}



function callFunc() {
      throw new Error('This is an error.');  
}

否则,您可以在catch块中设置一个标志,然后立即对其进行测试,然后再继续操作。或者采取其他答案的选项之一。

答案 5 :(得分:0)

所以callFunc的内部是唯一可以改变的东西? 怎么样:

callFunc(){
    frm.submit(function() {
      alert('this should not submit');
      return false;
  });   
}

答案 6 :(得分:0)

要终止执行JS脚本,请使用:

system.stop()

答案 7 :(得分:-1)

您可以使用throw

中止javascript执行
if(a.value==1 && b.value==2){
    try{callFunc()  }catch(e) {} 
}
frm.submit();

function callFunc() {
    throw "stop execution";
}