如何在新行中添加内容

时间:2011-12-18 00:03:09

标签: jquery

假设发生的是用户输入他们的问题并选择他们的答案,当他们点击“添加问题”按钮时,它会添加问题和答案。

问题是我可以添加一个答案(你可以在这个小提琴中测试一下,点击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部分的底部。

1 个答案:

答案 0 :(得分:1)

$('#question')找到了一个包含id问题的表,而不是输入。它没有namevalue

因此$this.attr('name')的值为undefined。当您使用未定义的第二个参数调用.attr时,它将返回该属性的值。所以......

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

... 获取新创建的$questionText name属性的值,该值也是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')
    });