DOBON.NET DOBON.NETプログラミング掲示板過去ログ

hidden項目をJavaScriptで動的に取得しPOST送信

環境/言語:[ASP.NET 2.0  VisualStudio2005(VB)  SqlServer2008.DataAccess ]
分類:[ASP.NET]

いつも参考にさせていただいております。
ボタンをクリックしたした際にJavaScriptを使用し動的に画面表示項目を取得し別画面へPOST送信したい。
固定値を設定するとAction先のaspへ遷移し、
情報を渡す事ができるのですが、画面表示されている情報を取得できずに困っております。
解決に結びつかずご教示頂きたく、よろしくお願いします。

ASPX内部のコード
<input id="Button2" type="button" value="キャンセル" onclick="postCancel()" title="post Cancel" size="212" />

function postCancel() {
alert(document.forms.length);

var fm = document.createElement("form");
var h1 = document.createElement("input");
h1.type = "hidden";
h1.name = "OrderId";
h1.id = "hiddenOrder";
fm.appendChild(h1);

//最後の要素として追加
document.body.appendChild(fm);

//TEST 固定値←ここに画面表示情報を動的に設定
document.forms[1].hiddenOrder.value= "12345678"

alert(document.forms[1].hiddenOrder.value);

document.forms[1].target = "NEXT";
document.forms[1].action = "相対PASS指定.asp";
document.forms[1].method = "post";
document.forms[1].submit();
}
</script>

  非表示項目(Value情報は、VB.NET側でSQLの結果を設定)
<asp:HiddenField ID="hiddenOrder" runat="server"/>
■No27831 に返信(はちまきさんの記事)

> 画面表示されている情報を取得できずに困っております。

動的に取得したい画面表示項目は具体的に何でしょうか。

> 非表示項目(Value情報は、VB.NET側でSQLの結果を設定)
> <asp:HiddenField ID="hiddenOrder" runat="server"/>

非表示項目はなにか関連があるのでしょうか。
■No27834に返信(もりおさんの記事)
> ■No27831 に返信(はちまきさんの記事)
>
>>画面表示されている情報を取得できずに困っております。
>
> 動的に取得したい画面表示項目は具体的に何でしょうか。
⇒ 動的にとは、引き継がれたKey情報によって画面表示内容が異なる為、
  動的と表現しました。
>
>>非表示項目(Value情報は、VB.NET側でSQLの結果を設定)
>><asp:HiddenField ID="hiddenOrder" runat="server"/>
> 非表示項目はなにか関連があるのでしょうか。
⇒次の画面に渡したい情報を非表示項目に格納しております。
 そこで画面が表示された際のHTMLをソース表示して
 非表示項目ID情報を設定して試したのですが、値を取得出来ませんでした。
【コード】
var aaa = document.forms.length - 1;
document.forms[aaa].ctl00_body_hiddenOrder.value
alert(document.forms[aaa].ctl00_body_hiddenOrder.value);

 ご教示、アドバイスの程、宜しくお願いします。
2010/12/16(Thu) 23:44:10 編集(投稿者)

■No27835 に返信(はちまきさんの記事)

>> 動的に取得したい画面表示項目は具体的に何でしょうか。
>⇒ 動的にとは、引き継がれたKey情報によって画面表示内容が異なる為、
>  動的と表現しました。

私の質問がすこしわかりにくかったかもしれません。
動的の意味を確認したかったのではなく、どの画面表示項目を取得したいのでしょうか。という質問でした。

文章を拝見すると、この項目の値を取得したいということですね。
<asp:HiddenField ID="hiddenOrder" runat="server"/>

インライン式を使って HiddenField.ClientID プロパティの値を参照して、
document.getElementById で Element を取得するとよいかと思います。

var hiddenOrder = document.getElementById("<%= hiddenOrder.ClientID %>");
alert(hiddenOrder.value);
2010/12/17(Fri) 17:38:51 編集(投稿者)

ご教示有難う御座いました。
早速試してみました。1つの時はうまくいきました。
次画面へ引継ぐ情報を2つに増やすと1つめの情報がNULLまたはオブジェクトがありません。とエラーが表示されてしまいます。
思いこみなどで視野が狭くなっているのかと思いますので
再度、アドバイスをお願い致します。

> インライン式を使って HiddenField.ClientID プロパティの値を参照して、
> document.getElementById で Element を取得するとよいかと思います。
>
> var hiddenOrder = document.getElementById("<%= hiddenOrder.ClientID %>");
> alert(hiddenOrder.value);

JavaScriptのコードを記載いたします。

function postAdmin() {
var aa = document.forms.length;
var fm = document.createElement("form");
var h1 = document.createElement("input");
var h2 = document.createElement("input");
//引継Key1目情報
h1.type = "hidden";
h1.name = "OrderId";
h1.id = "hiddenOrder";
fm.appendChild(h1);
document.body.appendChild(fm);
//引継Key2目情報
h2.type = "hidden";
h2.name = "pass";
h1.id = "txtSpecial";
fm.appendChild(h2);
document.body.appendChild(fm);
//引継Key1目情報設定
var hiddenOrder = document.getElementById("<%= hiddenOrder.ClientID %>");
alert(hiddenOrder.value);
//引継Key2目情報設定
var txtSpecial = document.getElementById("<%= txtSpecial.ClientID %>");
alert("[[" + txtSpecial.value + "]]");
//上級処理用のチェック処理を追加
if (txtSpecial.value != "1234567890") {
alert("上級処理には特別な処理を行います。\n @入力パスワードを確認して下さい。\n A専用パスワードを設定して下さい。");
} else {
alert("処理実行前");
document.forms[aa].hiddenOrder.value = hiddenOrder.value;
document.forms[aa].txtSpecial.value = txtSpecial.value;
document.forms[aa].target = "NEXT";
document.forms[aa].action = "相対Pass.asp";
document.forms[aa].method = "post";
document.forms[aa].submit();
}
}

宜しくお願い致します。
添付ファイル: err00001.JPG (6 KB)
自己解決いたしました。
コーディングミスでした。申しわけ御座いません。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板