<body>
<form name="fm1">
<input type="hidden" value="1" id="page">
<input type="button" value="送信する" onClick="execute()">
</form>
<form name="fm2">
<input type="hidden" value="2" id="page">
<input type="button" value="送信する" onClick="execute()">
</form>
<div id="container">content</div>
</body>
</html>
上記のように同じ関数execute()を実行するのですが、受け渡す値がvalue="1" と value="2"と別々になっています。
素人考えではフォームfm1とfm2とは別々の値(1or2)を渡すと思ったのですが、どちらのボタンを押してもvalue="1"の結果となります。
二つのフォームを別々に動作させるにはどのようにすればよいでしょうか。
No.3ベストアンサー
- 回答日時:
id="page"が2つありますよ。
たとえば、こんな感じではないでしょうか。
1つめのフォーム
<input type="hidden" value="1" name="page" id="page1">
2つめのフォーム
<input type="hidden" value="2" name="page" id="page2">
スクリプトの$F('page')の部分も、どちらのフォームの"page"をとるのか、明確に指定する必要があります。
1つめのフォーム
<input type="button" value="送信する" onClick="execute(1)">
2つめのフォーム
<input type="button" value="送信する" onClick="execute(2)">
<script>
function execute(id) {
// 中略
paramList += "&page=" + $F('page'+id);
// 後略
未検証です。
prototype.jsには詳しくないので適宜動作するように書き直してください。
有難う御座います!!
1つ目のフォームと2つ目のフォームのidをご指摘どおり変更し、それぞれのonClickをexecute(1)と(2)に変更しました。
そして、
function execute(id) {
// 中略
paramList += "&page=" + $F('page'+id);
とidを追加記述したところ、無事二つのフォームが別々に動作しました。
二日ずっと悩んでいたことが解決しましたこと、大変感謝いたします。
No.2
- 回答日時:
execute()の内容が提示されていないので、どうなっているのか不明ですが、勝手に想像するところ…
function execute(){
document.fm1.submit();
}
とか、
documnet.form[0].submit();
みたいになっているだけではないのでしょうか?
もし、他に処理を行っていないのならば、input buttonにしているものを、submitボタンに変えてしまえば、それぞれのformが送信されますし、スクリプトも不要になります。
<input type="submit" value="送信する">
スクリプトで他に処理を行っている場合は、executeの呼び出し側でexecute(this.form)のようにして、formを渡しておいて、
function execute(f){ f.submit(); }
みたいにすれば、それぞれのformがsubmitされます。
(他の処理内容が不明なので、↑では省略しています。)
この回答への補足
すみません。長くなるので関数部分を省きました。
念のため、全てを記述いたします。
<html>
<head>
<title>サンプル</title>
</head>
<script type="text/javascript" src="./prototype.js"></script>
<script type="text/javascript">
function execute() {
var url = './ItemSearch07.php';
var paramList = "sword=" + encodeURIComponent($F('txtWord'));
paramList += "&sort_mode=1";
paramList += "&sort=" + $F('slctSort');
paramList += "&page=" + $F('page');
new Ajax.Request(url,
{
method: 'get',
onSuccess: getData,
onFailure: showErrMsg,
parameters: paramList
});
function getData(data){
var response = data.responseXML.getElementsByTagName('Responce');
var details = response[0].getElementsByTagName('Details');
var TotalItems = parseInt(response[0].getElementsByTagName('TotalItems')[0].firstChild.nodeValue);
var TotalPages = parseInt(response[0].getElementsByTagName('TotalPages')[0].firstChild.nodeValue);
var tmpHtml = "";
tmpHtml += "<p>総商品数:" + TotalItems + "<br />"
tmpHtml += "総ページ数:" + TotalPages + "</p><br />"
tmpHtml += "<table><tr>";
for(i = 1; i < TotalPages+1; i++){
//HTML作成
tmpHtml += "<td><form name='" + i + "'><input type='hidden' value='" + i + "' id='page'><input type='button' value='" + i + "' onClick='execute()'></form></td>";
}
tmpHtml += "</tr></table>";
for(i = 0; i < details.length; i++){
//値を取得
var ProductName = details[i].getElementsByTagName('ProductName');
var ProductNameValue = ProductName[0].firstChild.nodeValue;
var DetailURL = details[i].getElementsByTagName('DetailURL');
var DetailURLNameValue = DetailURL[0].firstChild.nodeValue;
var Price = details[i].getElementsByTagName('Price');
var PriceNameValue = Price[0].firstChild.nodeValue;
//HTML作成
tmpHtml += "<p>";
tmpHtml += "<a href='" + DetailURLNameValue + "' target='_blank'>" + ProductNameValue + "</a>:" + PriceNameValue + "円<br />";
tmpHtml += "</p>";
tmpHtml += "<hr />";
}
//結果を表示
container.innerHTML = tmpHtml;
}
function showErrMsg(){
clearDisp();
container.innerHTML = "データを取得できませんでした。<br />\n";
}
}
</script>
<body>
<form name="fm1" id="fm1">
<input type="text" id="txtWord" size="30" value="PSP" />
ソート
<select id="slctSort">
<option value="0" selected>価格順(昇順)</option>
<option value="1">価格順(降順)</option>
</select>
<input type="hidden" value="1" id="page">
<input type="button" value="送信する" onClick="execute()">
</form>
<form name="fm2" id="fm2">
<input type="text" id="txtWord" size="30" value="PSP" />
ソート
<select id="slctSort">
<option value="0" selected>価格順(昇順)</option>
<option value="1">価格順(降順)</option>
</select>
<input type="hidden" value="2" id="page">
<input type="button" value="送信する" onClick="execute()">
</form>
<div id="container">content</div>
</body>
</html>
No.1
- 回答日時:
formは5個でも6個でも設定できるわ。
execute()関数の実装がおかしいために
発生している不具合でしょうね。
そのHTMLだけだと1も2も送信されないわ。
この回答への補足
execute()関数ですが、長いのではしょってしまいましたが下記のようなものです。
value="1" or value="2"の値は"page"に反映させているつもりなのですが、ここがおかしい可能性が大きいみたいですね。
<script type="text/javascript" src="./prototype.js"></script>
<script type="text/javascript">
function execute() {
var url = './ItemSearch07.php';
var paramList = "sword=" + encodeURIComponent($F('txtWord'));
paramList += "&sort_mode=1";
paramList += "&sort=" + $F('slctSort');
paramList += "&page=" + $F('page');
new Ajax.Request(url,
{
method: 'get',
onSuccess: getData,
onFailure: showErrMsg,
parameters: paramList
});
function getData(data){
var response = data.responseXML.getElementsByTagName('Responce');
var details = response[0].getElementsByTagName('Details');
var TotalItems = parseInt(response[0].getElementsByTagName('TotalItems')[0].firstChild.nodeValue);
var TotalPages = parseInt(response[0].getElementsByTagName('TotalPages')[0].firstChild.nodeValue);
var tmpHtml = "";
tmpHtml += "<p>総商品数:" + TotalItems + "<br />"
tmpHtml += "総ページ数:" + TotalPages + "</p><br />"
tmpHtml += "<table><tr>";
tmpHtml += "</tr></table>";
for(i = 0; i < details.length; i++){
//値を取得
var ProductName = details[i].getElementsByTagName('ProductName');
var ProductNameValue = ProductName[0].firstChild.nodeValue;
var DetailURL = details[i].getElementsByTagName('DetailURL');
var DetailURLNameValue = DetailURL[0].firstChild.nodeValue;
var Price = details[i].getElementsByTagName('Price');
var PriceNameValue = Price[0].firstChild.nodeValue;
//HTML作成
tmpHtml += "<p>";
tmpHtml += "<a href='" + DetailURLNameValue + "' target='_blank'>" + ProductNameValue + "</a>:" + PriceNameValue + "円<br />";
tmpHtml += "</p>";
tmpHtml += "<hr />";
}
//結果を表示
container.innerHTML = tmpHtml;
}
function showErrMsg(){
clearDisp();
container.innerHTML = "データを取得できませんでした。<br />\n";
}
}
</script>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript Javascript初心者|jQueryの.val()で値を取得し複数の要素を連結させる方法知りたい 2 2022/06/02 12:06
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
送信フォームで送信ボタンをお...
-
VBSでブラウザ上のテキストボッ...
-
onclickで2個指定するには?
-
confirmのOK・キャンセルを押し...
-
onClick="this.form.submit
-
フォーム内で記入したクエリ送...
-
VBScript
-
ボタンを押すとチェックボック...
-
jsで質問です。 ボタンが二つ存...
-
submitするとなぜか2度実行する
-
テキストボックスでEnterを押し...
-
javascriptで二重送信防止
-
フォームのボタンをSUBMITから...
-
JavaScriptにおいてPOSTで送信...
-
return trueとreturn falseの用...
-
Selectの中身をfor文で入れる
-
プルダウン選択を変更すると、...
-
onClickとsubmitの処理順序
-
localStorageでのcheckbox制御
-
ラジオボタンにタブインデック...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSでブラウザ上のテキストボッ...
-
submitするとなぜか2度実行する
-
onclickで2個指定するには?
-
confirmのOK・キャンセルを押し...
-
ボタン2回押しを無効にしたい
-
フォーム内で記入したクエリ送...
-
onClick="this.form.submit
-
JavaScriptにおいてPOSTで送信...
-
disabled プロパティが表示され...
-
確認ダイアログの出し方(JavaS...
-
onclickをEnterキーでも行いたい
-
jsで質問です。 ボタンが二つ存...
-
ボタン無しでフォーム内容送信
-
confirm()で表示したダイアログ...
-
ボタンを押すとチェックボック...
-
javascriptで二重送信防止
-
VBScript
-
メールフォーム:「必須項目」...
-
Javascriptで二重送信を防止し...
-
ホームページビルダーでメール...
おすすめ情報