【问题标题】:Javascript - Stop function from executing with functionJavascript - 停止函数与函数一起执行
【发布时间】:2014-02-14 00:10:13
【问题描述】:

我想在另一个 JS 函数中插入我的 debugger 函数并停止执行。

我知道 return false/true 可以完成这项工作,但我希望我的调试器功能能够自动完成。

示例:

<script type="javascript">
    function validateFirstName () {
        //validating first name field
        var fn = $('#firstname').val();
        if(fn == "") {
            $("#errorMsg").html("Please insert first name");
            $("#firstname").focus();
            return false;
        }

        debugger(); //I want to stop everything here

        // if validation passes, redirect browser:
        window.location = 'nextpage.html';
    }

    function debugger () {
        console.log("Some custom message here");
        return false;
    }
</script>

您会注意到我将debugger 函数放在validateFirstName() 函数中。

我假设我的debugger() 函数中的return false 将阻止validateFirstName() 执行。但事实并非如此。

如果不在validateFirstName() 函数中添加return false,我如何使用我的debugger() 函数来停止所有执行?

【问题讨论】:

  • 在你的调试器函数中,抛出“原因就在这里”;
  • 您是否意识到浏览器有一个debugger; 声明,您现在正在覆盖它! MDN Debugger
  • 您可以使用提到的内置调试器语句 epascarello 而不是创建自己的调试器函数。

标签: javascript function debugging


【解决方案1】:

替换

debugger(); //I want to stop everything here

return debugger(); //I want to stop everything here

上面的例子总是会在 true 或 false 时停止。

如果为真则继续到 window.location,如果为假则停止。

if(!debugger())
  return;

在您的情况下,它似乎是函数内部的函数,因此您不妨使用

if(!debugger())
  return false;


似乎您真正想要做的是在执行代码上设置一个断点。
在 Chrome 浏览器中按 Ctrl+Shift+I
然后转到Sources标签
单击计数行号顶部的向右箭头(看起来像播放按钮)以查看网站列表
找到您的网站点击文件夹
找到您想要的任何脚本
现在单击代码中的任意位置以关闭侧栏
现在最后点击倒数行的一侧的任何数字
这将设置一个breakpoint,这意味着如果您通过在您的网站上执行某些操作使代码到达那里,或者使用强制运行代码,它将停止该代码 Console 选项卡或只是在地址栏中输入javascript: function_to_call();

【讨论】:

    【解决方案2】:

    你可以像这样从debugger ()投掷。

    function debugger () {
        console.log('Some custom message here');
        throw 'Debugging Code';
    }
    

    虽然这会做你想做的事,但我不推荐它。基本上发生的事情是你抛出了一个没有在你的代码中被捕获的错误(浏览器会捕获它,但这可能不是那么干净)。

    【讨论】:

      【解决方案3】:

      你可能会抛出一个错误:

      function validateFirstName () {
              //validating first name field
          var fn = $('#firstname').val();
          if(fn==""){
            $("#errorMsg").html("Please insert first name");
                $("#firstname").focus();
            return false;
              }
      
      debugger(); //I want to stop everything here
      
      // if validation passes, redirect browser:
      window.location='nextpage.html';
      
      }
      
      
      function debugger () {
          throw new Error("Some custom message here");
      }
      
      try{
          validateFirstName();
      }catch(e){
         console.log(e);
      }
      

      【讨论】:

        【解决方案4】:

        如果您使用的是 Chrome 等现代浏览器,为什么不直接使用 debugger

        这将触发您的开发者工具中的调试器。

        像这样:

        debugger; //I want to stop everything here

        注意缺少的()

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-09-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-11
          • 2017-09-05
          • 1970-01-01
          相关资源
          最近更新 更多