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

时间:2015-08-06 23:38:14

标签: javascript jquery switch-statement addclass

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

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小提琴 - http://jsfiddle.net/ck221xxk/

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

3 个答案:

答案 0 :(得分:2)

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

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 :(得分:2)

您的代码存在一些问题。

  1. 未指定您指定的函数(switch语句未调用它)。 switch语句只是JavaScript中的一个构造,而switch语句中的:并不像 object literal 那样意味着=。 (我自己没先注意到这一点,所以感谢@WhiteHat)。
  2. this从函数到函数更改值。 外部函数中的this可能意味着“当前的HTML节点”,但在匿名函数内部,除非定义了不同的内容,否则它很可能会引用window
  3. 定义类似的内联函数是语法错误。
  4. 可以当然具有在线功能;但您需要将其包含在括号()中,并使用() call()apply()或类似名称进行调用。

    我将使用call(),因为call()中指定的第一个参数是this - 参数,这意味着我可以在两个上下文中保持this“相同”。

    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;      
          }
       }
    }
    

    但是,除非你严重需要新的命名空间,否则我认为没有任何理由这样做,任何其他答案都可能就足够了。

答案 2 :(得分:1)

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

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
};

相关问题