2012-09-17 28 views
2

我有問題。我想添加一個函數返回值給一個變量,但它說這個函數是未定義的。這是我的代碼。 :說我分配給變量的函數是undefined

var selectedExpenseList = getSelectedExpenseIDs(); 

這裏是我的功能:

function getSelectedExpenseIDs() { 
      var selectedExpensesList = new Array; 
      var i = 0; 
      $('.expenseCheckBox:checked').each(function() { 
       if ($(this)[0].id !== "checkAllExpenses") { 
        selectedExpensesList[i] = $(this)[0].id.split('_')[1]; 
        ++i; 
       } 
      }); 
      return selectedExpensesList; 
     } 

編輯:這裏是我的全部功能:我想從列表中刪除的東西,如果一個人已經檢查了它。

 var selectedExpenseList; 
function actuallyDeleteTheExpense(canDeleteExpenses) 
{ 
    selectedTasksList = getSelectedTaskIDs(); 
    var deleteTrackers = false, deleteExpenses = false; 


    if (canDeleteExpenses && !canDeleteTrackers) 
    { 
     $.Zebra_Dialog('Do you wish to remove Expenses?', 
     { 
      'type': 'question', 
      'title': 'Confirmation', 
      'buttons': [ 
         { 
          caption: 'Yes', callback: function() { 
           deleteTrackers = false; 
           deleteExpenses = true; 
           doTheDelete(deleteExpenses); 
          } 
         }, 

         { 
          caption: 'No', 
          callback: function() { 
           doTheDelete(deleteExpenses); 
          } 
         } 
        ] 
     }); 
    } 
      } 
      function doTheDelete(doIDeleteExpenses) 
      { 
       if (selectedTasksList.length > 0) 
       { 
        $.ajax({ 
         type: "POST", 
         //url: "/Tasks/ViewTasks.aspx/deleteTasksAndLinkedItems", 
         url: '<%=ResolveUrl("~/Expenses/ViewExpenses.aspx/deleteSelectedExpense")%>', 
         data: "{ 'TaskIDs': [" + selectedTasksList.join(',') + "], DeleteTrackers : " + doIDeleteTrackers + ", DeleteExpenses : " + doIDeleteExpenses + " }", 
         //fix data 
         contentType: "application/json; charset=utf-8", 
         dataType: "json", 
         success: function (data) { 
          var ss = data.d; 
          if (ss.length > 0) { 
           for (var i = 0; i < ss.length; ++i) { 
            $.noty.consumeAlert({ layout: 'center', type: 'error', dismissQueue: true }); 
            alert(ss[i]); 

           } 
          } 
          $("#viewTasksGrid").flexReload(); 
         }, 
         error: function (data) { 
          $.noty.consumeAlert({ layout: 'center', type: 'error', dismissQueue: true, modal: true }); 
          alert('Error Deleting Tasks'); 
          if (window.console) { 
           console.log(data); 
          } 
         } 
        }); 
       } else { 
        showMessage('No tasks are selected.'); 
       } 
      } 
//end delete expense 


     function getSelectedExpenseIDs() { 
      var selectedExpensesList = new Array; 
      var i = 0; 
      $('.expenseCheckBox:checked').each(function() { 
       if ($(this)[0].id !== "checkAllExpenses") { 
        selectedExpensesList[i] = $(this)[0].id.split('_')[1]; 
        ++i; 
       } 
      }); 
      return selectedExpensesList; 
     } 
+0

你介意編輯在你的代碼中有它的順序片斷? – Alexander

+0

你的函數調用和函數聲明在哪裏相互關聯?你的函數聲明是否在'$(document).ready(...)'中? – Pete

+1

請在[fiddle](http://jsfiddle.net)中添加* exact *錯誤消息和/或減少的測試用例。 – zzzzBov

回答

2

我注意到你的函數代碼比你調用它的代碼多了一次tab。可能你的函數的作用域不正確(例如,它在另一個函數內部聲明,並且你從該函數外部調用它)。

如果你的函數回到未定義狀態,那幾乎肯定是一個範圍問題。我看到這個函數本身沒有錯。

例如:

$(document).ready(function() { 
    function myFunction() { 
     return 3; 
    } 
}); 

var bob = myFunction(); //Error: myFunction is not defined. 
+0

裏面謝謝。我會看看 – user1084319

+0

我發佈了我的整個功能。我對確定範圍不確定。我正在瀏覽它,但我也發佈了它,如果他們能找到任何東西 – user1084319

+0

看看我添加的例子,如果這個結構看起來很熟悉,那麼這可能是你的罪魁禍首。 – Pete