2017-06-14 78 views
0

我使用RS-JAX GET請求在html中加載。請求後,我需要功能二來開始監聽輸入。在其他功能完成後收聽功能

下面是我試過的,但現在我得到兩個錯誤: 1)TypeError:functionTwo不是函數。 2)ReferenceError:loadIngredients未定義。

我對#2的猜測是我在另一個函數中調用它,而var functionOne正在搞亂它。我不知道#1。

有沒有辦法解決這個問題?也許通過編輯代碼,也許通過另一種方式來監聽函數完成時的情況?

功能一個

var functionOne = function loadIngredients(selected) { 
    var r = $.Deferred(); 
    var username = window.sessionStorage.getItem("huidigeGebruiker"); 
    var datum = document.getElementById("datepicker").value; 
    var url = "restservices/ingredients?Q1=" + username + "&Q2=" + datum; 
     $.ajax({ 
      url : url, 
      method : "GET", 
      beforeSend : function(xhr) { 
       var token = window.sessionStorage.getItem("sessionToken"); 
       xhr.setRequestHeader('Authorization', 'Bearer ' + token); 
      }, 
      success : function(data) { 
       $(".table").find("tr:gt(0):not(:last)").remove(); 
       $(data).each(function (index) { 
        $(".table").find('tr:last').prev().after('<tr><td class="ingredient">'+this.ingredientnaam+'</td><td class="hoeveelheid"><input class="gramtxt" type="text" value="'+this.hoeveelheid+'" name="gramtxt" id="gramtxt"></td><td class="subtotaal">'+this[selected]+'</td><td class="removeingredient"><a href="#"> <i class="fa fa-times text-red"></i></a></td></tr>'); 
        }); 
       loadTotals(); 
       ingredienten = []; 
       loadAllIngredients(); 
      }, 
      error: function(xhr){ 
       $(".dagboektable").html('Ophalen ingrediënten mislukt. Ben je ingelogd?'); 
      }, 
     }); 
     return r; 
} 

兩個作用

var functionTwo = $('#gramtext').bind('input', function() { 
    console.log("Y"); 
    var hoeveelheid = $(this).val(); 
    console.log(hoeveelheid); 
}); 

監聽

需要
functionOne().done(functionTwo()); 
+1

'functionTwo'不是一個函數,它是任何'bind'返回的,iirc是綁定函數返回的任何東西,在這種情況下什麼也不是。做'console.log(functionTwo)'看看它是什麼。 – Carcigenicate

+0

@Carcigenicate任何想法如何我可以解決這個問題,因此它適用於我的目的? –

+0

您正在使用var functionTwo,這意味着它在運行functionOne的那一刻尚未被聲明。這個概念在這裏解釋:https://stackoverflow.com/questions/336859/var-functionname-function-vs-function-functionname。定義爲函數functionTwo()使用早期的函數 –

回答

0

事情要改變:

第一:

var functionOne = function loadIngredients(selected) { 
To 
var functionOne = function (selected) { 

二:

$.ajax(......); return r; 
TO 
return $.ajax(......); 

三:

var functionTwo = $('#gramtext').bind('input', function() { 
    console.log("Y"); 
    var hoeveelheid = $(this).val(); 
    console.log(hoeveelheid); 
}); 

TO 

var functionTwo = function(){ 
$('#gramtext').bind('input', function() { 
    console.log("Y"); 
    var hoeveelheid = $(this).val(); 
    console.log(hoeveelheid); 
}); 
} 

這將解決幾乎所有的誤差修改,然後再次嘗試。