2014-01-22 2 views
0

У меня есть функция, как это:как я вызвать функцию и поместить его в метод

$(document).ready(function() { 

    $('.SelectID').click(function (e) { 
var output; 
     var select = $(this); 
     switch (select.text()){ 
      case "FirstOption": 
       var a = ("1"); 
       break; 
      case "SecondOption": 
       var b = ("2"); 
       break; 
     } 
     var output = [a|| b]; 
     return output; 
    } 
    $(document).on("click", "#Soemthinhg", function() { 
    data1 = $('#something').val(); 
    data2 = $(output).val(); 

    AjaxMethod(data1, data2) 
}); 
}); 

The question is that when I run the code it says 0x800a138f - JavaScript runtime error: Unable to get property 'toLowerCase' of undefined or null reference

ответ

1

Вы можете использовать замыкание контекстной переменный, чтобы сделать это

$(document).ready(function() { 
    //declare it in a closure scope so that the global scope will not get polluted 
    var output; 
    $('.SelectID').click(function (e) { 
     var select = $(this); 
     switch (select.text()) { 
      case "FirstOption": 
       var a = ("1"); 
       break; 
      case "SecondOption": 
       var b = ("2"); 
       break; 
     } 
     output = [a || b]; 
    }) 
    $(document).on("click", "#Soemthinhg", function() { 
     data1 = $('#something').val(); 
     //here use the closure variable 
     data2 = $(output).val(); 

     AjaxMethod(data1, data2) 
    }); 
}); 

Использование глобальной переменной (не рекомендуется)

//declare the variable in global scope 
var output; 
$(document).ready(function() { 
    $('.SelectID').click(function (e) { 
     var select = $(this); 
     switch (select.text()) { 
      case "FirstOption": 
       var a = ("1"); 
       break; 
      case "SecondOption": 
       var b = ("2"); 
       break; 
     } 
     output = [a || b]; 
    }) 
}); 
$(document).on("click", "#Soemthinhg", function() { 
    data1 = $('#something').val(); 
    //here use the global variable 
    data2 = $(output).val(); 

    AjaxMethod(data1, data2) 
}); 
+0

Это ответ, который вы ищете. Объявлять вывод глобально. – tmutton

+0

вы разместили функцию onclick #Soemthinhg внутри функции готовности документа, что, если я хочу, чтобы эта функция была за пределами документа готова? –

+1

@Dip в этом случае вам нужно объявить переменную глобальной переменной не как замыкающей ... есть ли какая-то конкретная причина для этого ... в обычных обстоятельствах я не буду поощрять добавление переменной в глобальную область. –

0

Вы указали выходную переменную внутри функции document.ready, она не будет доступна вне области видимости. Если вы хотите получить доступ к выходной переменной вне функции document.ready, объявите ее как глобальную переменную.

Вы можете объявить ее как глобальную переменную, как var output; вне любой функции

или внутри document.ready функции, как window.output = [a | b]

$(document).ready(function() { 
     $('.SelectID').click(function (e) { 
      var select = $(this); 
      switch (select.text()){ 
       case "FirstOption": 
        var a = ("1"); 
        break; 
       case "SecondOption": 
        var b = ("2"); 
        break; 
      } 
      window.output = [a|| b]; 
      return output; 
     } 
     }); 

    $(document).on("click", "#Soemthinhg", function() { 
     data1 = $('#something').val(); 
     data2 = $(output).val(); 

     AjaxMethod(data1, data2) 
    }); 
Смежные вопросы