2011-12-18 15 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'))が定義されていないと記載されています。

テキストエリアの質問を別のテキストエリアの行に追加するにはどうすればよいですか?

私の現在のコードはこのjsFiddleにはありません。hereをクリックすると、行を追加する関数がjavascriptセクションの下部にあります。

+0

はミッシングリンクはありますか? – Hidde

+0

申し訳ありませんが、おかげで、私はリンクを固定しました – BruceyBandit

+1

'を使用してください。val() '.attr( 'value')'の代わりに値を取得/設定します。 – ThiefMaster

答えて

1

$('#question')は、入力ではなくID質問の表が見つかりました。 nameまたはvalueはありません。

$this.attr('name')の値はundefinedです。定義されていない第2引数で.attrを呼び出すと、属性の値が返されます。だから... ...

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

... undefinedで新しく作成された$questionTextさんname属性の値を取得します。次に、.attrを呼び出すと、エラーがスローされます。

解決策は、#questionの代わりに#questionTextAreaを見つけることです。


FWIW、より安全ないくつかの方法は、あなたの属性が設定します

….attr('name', $this.attr('name') || ''); 
  • 使用する属性のハッシュ:

    1. 使用||は空の文字列を置換します:

      ….attr({ name: $this.attr('name') }); 
      
    2. アトリビュートのハッシュを$に渡してください(余分なHTMLを持たない要素を作成する場合は、jQuery関数に渡すタグを閉じる必要はありません。それは)document.createElement('textarea')いずれかの方法に、内部的に、それを翻訳:

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

    私はすぐに会議に行くので、私はあなたのコードをテストしますので、私は約15分でこれをテキストします、ありがとう:) – BruceyBandit

    関連する問題