dポイントプレゼントキャンペーン実施中!

何度も呼ばれる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);
}

A 回答 (3件)

createhidden()を



function createhidden( name, value, form ){
form.innerHTML += '<input type="hidden" name="' + name + '" value="' + value +'">';
}

のように書けばIEでも標準ブラウザでもOK
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/10/29 12:15

すでに回答は出ていますが…



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」ってなってた…
    • good
    • 0
この回答へのお礼

回答遅れて申し訳ございません
名前での確認方法ありがとうございます
勉強になります

paramaterはparameterのスペルミスですね。。。
恥ずかしい。。。

お礼日時:2009/10/29 12:14

IEではform関連要素のname属性は動的に変えられない仕様になっています。


要素作成時に限れば、こういうこんな感じにname属性を付けられます。

var elm = document.createElement('<input name="' + name + '">');

ただし、他のブラウザではこの記述が無効なので分岐します。

var elm = document.createElement(/*@cc_on'<' + @*/'input'/*@cc_on + ' name="' + name + '">'@*/);


他の部分は動いていると思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
これもIEの仕様だったんですね。。。

ほんとIEには悩まされます><

お礼日時:2009/10/29 12:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!