2013-11-22 18 views
0

我遇到了一個奇怪的問題。我確定它與變量的範圍有關,但我無法弄清楚原因。這是在谷歌鉻31.0.1650.57和Firefox 24.0被做了下面的代碼: 第一template.js(以下部分開始對template.js第28行)是由一個下拉觸發而改變對象在發送到函數時給出了未定義的類型

$("select[name=class]").change(function() { 
     var subclassSQL = new Array(); 
     subclassSQL[0] = "`class`, `type`, `subclass`"; 
     subclassSQL[1] = "subclass"; 
     subclassSQL[2] = "class"; 
     subclassSQL[3] = $("select[name=class] option:selected").html(); 
     splitArr = new Array(); 
     splitArr[0] = split; 
     splitArr[1] = "type"; 
     call(subclassSQL, "subClass", "div.subClass", (function(){split(); Handlebars.registerHelper("top", function(object) {return new Handlebars.SafeString("<span>Choose your " + object[0].type + ":</span>\n<select name=\"subClass\">");});Handlebars.registerHelper("bottom", function() {return new Handlebars.SafeString("</select>");});}), splitArr, false); 
    }); 

則調用在ajaxCalls.js功能被觸發

function call(SQLarray, source, container, helper, function_, run) { 
    $.ajax({ 
     url: "includes/ajaxHandler.php", 
     type: 'post', 
     dataType: 'json', 
     data: {info: SQLarray}, 
     success: function(json) { 
      var template = Handlebars.templates[source], 
       tempData = {base: json} 
      console.log(tempData.base); 
      if (helper) {helper();} 
      if (function_) { 
       $(container).html(template(function_[0](function_.slice(1), tempData))); 
      } else { 
       $(container).html(template(tempData)); } 
      if (run) {update(jQuery);} 
     } 
    }); 
}; 

function split(field, tempData) { 
    console.log(tempData.base); 
    return tempData; 
}; 

當在被稱爲控制檯檢查,第一console.log(tempData.base);返回預期的JSON對象。但第二個返回

Uncaught TypeError: Cannot read property 'base' of undefined ajaxCalls.js:22 
split              ajaxCalls.js:22 
(anonymous function)           template.js:37 
$.ajax.success            ajaxCalls.js:11 
c                jquery.js:3048 
p.fireWith             jquery.js:3160 
k                jquery.js:8235 
r                jquery.js:8778 

呼籲function_的語法是:

split("type", tempData); 

這是爲什麼返回一個未定義的?

回答

0

我找到了解決方案!問題是由於模糊行觸發了call函數。

在寫幾行時,我注意到我叫spilled();在hepler功能之內。但我沒有發送任何變量!簡單地刪除split();解決了這個問題。這只是表明。排除你的功能是關鍵。

相關問題