如何在 switch 语句中添加执行自定义函数

How to add execute custom function in switch statement

我正在尝试根据传递给下面函数的参数执行 switch 语句,并尝试根据传递的参数执行不同的函数。但是当我在第三种情况下尝试一个函数时,我在 .js 文件的开头得到了 Uncaught ReferenceError: of another function,如下所示。

function getjobCon(reqType){

       var identifier= $( "#single" ).val();

          switch (reqType) { 
                            case 'job': 
                                alert('you clicked job');
                                break;
                            case 'title': 
                                alert('you clicked title');
                                break;
                            case 'designation': function(identifier){
                                 $(this).addClass('slate');

                            }                                   
                                break;      

                            }
                    }

有人能告诉我该怎么做吗?。我尝试了很多,但无法更正它。

JS Fiddle - http://jsfiddle.net/ck221xxk/

注意 - 我在单击不同的按钮时执行此功能。在我尝试执行另一个功能的第三种情况下,我正在更改按钮的 class。

只需删除函数语句,不需要它,或者只需调用您自己的函数语句...

function getjobCon(reqType){
   var identifier= $( "#single" ).val();

      switch (reqType) { 
                        case 'job': 
                            alert('you clicked job');
                            break;
                        case 'title': 
                            alert('you clicked title');
                            break;
                        case 'designation': 
                            customFunc(identifier);
                            break;      
                        }
                }

function customFunc(identifier) {
  // put code here
}

您的代码存在一些问题。

  1. 您指定的函数没有被调用(switch 语句没有调用它)。 switch 语句只是 JavaScript 中的一个构造,而 switch 语句中的 : 并不像在 对象字面量 [=42= 中那样表示 = ]. (我自己没有首先注意到这一点,所以感谢@WhiteHat)。
  2. this 在函数之间更改值。 this 在你的 外部函数中 可能意味着 "the current HTML-node" 但在匿名函数内部,它很可能指的是 window 除非定义了不同的东西。
  3. 像这样定义内联函数是一个语法错误。

可以当然有内嵌函数;但你需要将它括在方括号 () 中,并用 () call(), apply() 或类似的方式调用它。

我将使用 call() since the first argument specified in call()this 参数,这意味着我可以在两种情况下保留 this "the same"。

function getjobCon(reqType) {

  var identifier= $( "#single" ).val();

  switch (reqType) { 
      case 'job': 
          alert('you clicked job');
          break;
      case 'title': 
          alert('you clicked title');
          break;
      case 'designation': 
          (function(identifier){

           $(this).addClass('slate');

          }).call(this, identifier);                                   
          break;      
      }
   }
}

但是,除非您非常需要一个新的命名空间,否则我看不出有任何理由这样做,任何其他答案都可能就足够了。

您可以在该案例中调用您的下一个函数

function getjobCon(reqType) {
  var identifier = $("#single").val();

  switch (reqType) {
    case 'job':
      alert('you clicked job');
      break;
    case 'title':
      alert('you clicked title');
      break;
    case 'designation':
      doStuff(identifier);
      break;
  }
};

function doStuff(identifier){
  // execute other code here
};