• ベストアンサー

hiddenを動的に作成したい

何度も呼ばれるfunction(testfunc)があり、ここではparamaterというフィールドがあればそこに値を設定し、なければparamaterというhiddenフィールドを作成し、そのフィールドに値を作成。 その後、Ajax.Requestを使用して値をサーバに渡したいです。 下記のように作成しましたが、createhidden実行後もformobj.paramaterはundefinedになってしまいます。 ただ、実際は作成されているようで、サーバーには最初に設定した値が何度も飛んできている状態です。(同じnameのhiddenがたくさんできている状態?) 特にこの方法にこだわる事はないので、もっといい方法があればそれでも構いません。(post時に別のやり方?で値を渡すなど) 尚、最初からhtmlにhiddenを書いておくというのは無しでお願い致します。 function testfunc (value) { formobj = document.forms[0]; if (formobj.paramater) { formobj.paramater.value = value; } else { createhidden('paramater', value, formobj); } new Ajax.Request('./Suggest.do', { // 正しく補完情報を取得できた場合 onSuccess: aaaa, onFailure: bbbb, postBody: Form.serialize(formobj), asynchronous: true, method: 'post' }); } function createhidden( name, value, form ){ var elm = document.createElement('input'); elm.type = 'hidden'; elm.name = name; elm.value = value; form.appendChild(elm); }

質問者が選んだベストアンサー

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

createhidden()を function createhidden( name, value, form ){ form.innerHTML += '<input type="hidden" name="' + name + '" value="' + value +'">'; } のように書けばIEでも標準ブラウザでもOK

tetuya120
質問者

お礼

回答ありがとうございました。 yyr446様のソースをそのまま使用させていただきました。

その他の回答 (2)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

すでに回答は出ていますが… name属性で取得できないIEでも、一応、nameは定義できているみたい。ただし、要素の取得にそのname属性が利用できないようだ。 要素を取得して、「element.name」を見るとparamaterが返ってくるし、送信時もちゃんとparamaterとして送られるようだ。 単純に formobj.paramater だとundifinedになっちゃうけれど、以下のような方法にすれば確認も可能です。 (IE6のみ。7、8については未確認) var flg = false, c = document.forms[0].firstChild; while (c) { if (c.name == 'paramater') { flg = true; break; } c = c.nextSibling; } *ところで「parameter」だとばかり思い込んでいたので、全然取得できなくて??状態だったんだけど、よく見たら「paramater」ってなってた…

tetuya120
質問者

お礼

回答遅れて申し訳ございません 名前での確認方法ありがとうございます 勉強になります paramaterはparameterのスペルミスですね。。。 恥ずかしい。。。

  • imq
  • ベストアンサー率72% (16/22)
回答No.1

IEではform関連要素のname属性は動的に変えられない仕様になっています。 要素作成時に限れば、こういうこんな感じにname属性を付けられます。 var elm = document.createElement('<input name="' + name + '">'); ただし、他のブラウザではこの記述が無効なので分岐します。 var elm = document.createElement(/*@cc_on'<' + @*/'input'/*@cc_on + ' name="' + name + '">'@*/); 他の部分は動いていると思います。

tetuya120
質問者

お礼

回答ありがとうございます。 これもIEの仕様だったんですね。。。 ほんとIEには悩まされます><

関連するQ&A