假设发生的是用户输入他们的问题并选择他们的答案,当他们点击“添加问题”按钮时,它会添加问题和答案。
问题是我可以添加一个答案(你可以在这个小提琴中测试一下,点击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 :(得分:1)
$('#question')
找到了一个包含id问题的表,而不是输入。它没有name
或value
。
因此$this.attr('name')
的值为undefined
。当您使用未定义的第二个参数调用.attr
时,它将返回该属性的值。所以......
$questionText = $(…).….attr('name', undefined)
... 获取新创建的$questionText
name
属性的值,该值也是undefined
。然后你试着在它上面调用.attr
,这会引发错误。
解决方案应该是找#questionTextArea
而不是#question
。
FWIW,有几种更安全的方法来设置你的属性:
使用||
替换空字符串:
….attr('name', $this.attr('name') || '');
使用属性哈希:
….attr({ name: $this.attr('name') });
将属性的哈希值传递给$
(仅供参考,当你创建一个没有额外HTML的元素时,你不需要关闭你传递给jQuery函数的标签。它会翻译它,在内部,document.createElement('textarea')
两种方式):
var $questionText = $("<textarea>", {
name: $this.attr('name'),
value: $this.attr('value')
});