2014-12-30 29 views
0

我正在使用純JavaScript原型函數來創建一個複選框列表,並在迭代數據時追加它們。一切都是使用JavaScript和CSS創建的。 當我運行它,所以它可以繪製一個複選框列表,它會引發我一個錯誤:獲取錯誤:無法執行'節點'上的'appendChild'

"Uncaught TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'." 

這條線:

results.push(this.list.appendChild(letter.draw)); 

相信有什麼錯checkboxinput原型,因爲它的工作原理其他地方都很好。在FormTicket中有什麼問題嗎?任何人都可以幫助我做錯什麼? 表單頁面是FormTicket

FormTicket.prototype.respond = function(data) { 
    var letter, i, len; 
    this.letters = []; 
    for (i = 0, len = data.length; i < len; i++) { 
    letter = data[i]; 
    this.letters.push(new ParaInfo({ 
     InfoIndividual: letter 
    })); 
    } 
    return this.drawList(); 
}; 

FormTicket.prototype.drawList = function() { 
    var letter, i, len, ref, results; 
    ref = this.letters; 
    results = []; 
    for (i = 0, len = ref.length; i < len; i++) { 
    letter = ref[i]; 
    results.push(this.list.appendChild(letter.draw)); 
    } 
    return results; 
}; 

在ParaInfo方法中的繪製函數是:

ParaInfo.prototype.draw = function() { 
    this.e = new CheckBoxInput({ 
    title: this.InfoIndividual, 
    float: 'left', 
    }); 
    return this.e; 
}; 

和僅供參考,checkboxinput是另一種原型中,它的一部分,如下:

CheckBoxInput.prototype.build = function(arg) { 
    this.title = arg.title; 
    this.float = arg.float; 
}; 

CheckBoxInput.prototype.draw = function() { 
    var box, check; 
    this.item = document.createElement('div').addClass('checkboxInput'); 
    return this.item; 
}; 
+0

我沒有仔細檢查過,但它看起來像試圖調用將函數'letter.draw'追加到DOM節點。你不能附加功能;你只能追加DOM節點。你的意思是*調用*'letter.draw'並追加呼叫的返回值?或者你認爲'letter.draw'是'drawList'中的函數以外的東西嗎? – apsillers

+0

@apsillers我的意思是調用letter.draw並追加調用的返回值。所以,當我調用drawList函數時,它的返回值基本上是逐個繪製複選框 – newDevGeek

+1

'letter.draw'是對函數對象的引用。 'letter.draw()'是對函數的調用並引用其返回值。你使用第一種形式;看來你想用第二種形式代替。 – apsillers

回答

0

解決了它。需要調用「.draw()。draw()」 即最初只調用ParaInfo的.draw()。添加了另一個調用CheckBoxInput繪製的「.draw()」。正確回覆追加:

results.push(this.list.appendChild(letter.draw().draw())); 

感謝用戶apsillers的寶貴意見。

相關問題