2011-12-18 74 views
0

假設發生的事情是,用戶鍵入他們的問題並選擇他們的答案,當他們點擊「添加問題」按鈕時,它會添加問題和答案。如何在新行添加東西

問題是,我可以添加一個答案(你可以在這個小提琴測試,單擊here,答案添加到新錶行的功能是在底部,其中function insertQuestion(form) function是選擇一個答案 例子:打開網格並選擇按鈕「4」,在答案文本框中鍵入1並選擇按鈕「B」,然後單擊「添加問題」按鈕。)

但是,如果在function insertQuestion(form) function中包含此代碼以嘗試添加問題:

$('#question').each(function() { 

    var $this = $(this); 
    var $questionText = $("<textarea></textarea>").attr('name',$this.attr('name')) 
       .attr('value',$this.attr('value')) 
    $question.append($questionText);  

}); 

它根本不會添加行。它表示$("<textarea></textarea>").attr('name',$this.attr('name'))在控制檯中未定義。

我怎樣才能得到它,以便它將從textarea添加到另一個textarea中的行的問題?

我目前無法使用的代碼是在這個jsFiddle中,點擊here,添加行的函數接近javascript部分的底部。

+0

是否有缺失的環節? – Hidde 2011-12-18 00:06:15

+0

對不起,感謝您的支持,我已經修復了鏈接 – BruceyBandit 2011-12-18 00:11:24

+1

使用'。val()'獲取/設置一個值而不是'.attr('value')'。 – ThiefMaster 2011-12-18 00:38:46

回答

1

$('#question')找到一個帶有id問題的表格,而不是輸入。它沒有namevalue。因此,$this.attr('name')的值是undefined。當您用未定義的第二個參數調用.attr時,它會返回該屬性的值。所以......

$questionText = $(…).….attr('name', undefined) 

... 得到新創建$questionTextname屬性,這也是undefined的價值。然後你試着打電話給.attr,這會引發錯誤。

解決方法應該是找到#questionTextArea而不是#question


FWIW,有一對夫婦更安全的方式來設置屬性:

  1. 使用||替換空字符串:

    ….attr('name', $this.attr('name') || ''); 
    
  2. 使用屬性的哈希:

    ….attr({ name: $this.attr('name') }); 
    
  3. 將屬性的散列值傳遞給$(僅供參考,如果創建的元素沒有額外的HTML,則不需要關閉傳遞給jQuery函數的標記。據其翻譯,在內部,以document.createElement('textarea')無論哪種方式):

    var $questionText = $("<textarea>", { 
        name: $this.attr('name'), 
        value: $this.attr('value') 
    }); 
    
+0

好吧,我會在大約15分鐘內發文,因爲我有一個快速會議去,然後我會測試你的代碼,謝謝:) – BruceyBandit 2011-12-18 00:36:38