こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

submit関数の使い方

javascript部分
function sendform(formname){
document.formname.submit();
}

html部分
<form action="test.html" method="post" name="form1">
<input type="text" name="textvalue" value="1">
</form>
<a href="javascript:void(0)" onclick="sendform('form1'); return false;">click1</a>

<form action="test.html" method="post" name="form2">
<input type="text" name="textvalue" value="2">
</form>
<a href="javascript:void(0)" onclick="sendform('form2'); return false;">click2</a>


今は、上記のように書いています。引数でフォーム名を渡し、その値によって送信フォームを変えたいのですがうまくいきません。if文を使って
if(formmei=="form1"){
document.form1.submit();
}else if(formmei=="form1"){
document.form2.submit();
}
という方法も考えたのですが、フォーム名だけ変えることができないかと考えています。

よろしくお願いします。

投稿日時 - 2009-12-17 19:32:05

QNo.5529699

暇なときに回答ください

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

それぞれのformに対応してクリック箇所があるなら、form内にsubmitボタンを設置する普通の方法でなんら問題がないと思いますけど…?

とりあえず、こんな感じ?
function sendform(formname){
document.forms[formname].submit();
}

投稿日時 - 2009-12-17 19:59:08

お礼

回答ありがとうございます。

シンプルですが、自分が考えていたものと合致します。
ありがとうございました。

投稿日時 - 2009-12-18 11:34:23

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.6

> form変数というのは、<form>~</form>内のOnclickイベントでのみ使えるものということでよろしいでしょうか?

正確には、 onclick には限らないと思います。 onkey* とか。

私の場合、必要な局面で使えなかった事が無くて、「正確にはどこで使えるか」は気にした事がありません。

例えば、formタグに無関係なタグでは formオブジェクトが欲しいケースはあまり無いでしょう。

また、 <form>~</form> 外ではどの formタグが欲しいか自明では無いので、あっても不安ですね。

投稿日時 - 2009-12-18 20:10:21

ANo.5

onclick="sendform('form2'); return false;" ⇒ onclick="sendform(form); return false;"

にして、

function sendform(formObj){
formObj.submit();
}

とするとどうですか?

form という変数は onclick 中だけで使える「用意された変数」で、その INPUTタグを含む FORMタグのオブジェクトです。

投稿日時 - 2009-12-17 23:13:26

お礼

回答ありがとうございます。

form変数というのは、<form>~</form>内のOnclickイベントでのみ使えるものということでよろしいでしょうか?

投稿日時 - 2009-12-18 11:52:27

ANo.4

たとえば、アンカーのテキストがclick1かclick2だったときに
直前のフォームをサブミットするとかどうでしょう?

<script>
try{
document.addEventListener ('click',function(e){clickFunc(e)},true);
}catch(e){
document.attachEvent('onclick',function(e){clickFunc(e)});
}
function clickFunc(e){
var t = (e.srcElement || e.target);
if(t.nodeName=="A"){
if(t.childNodes[0].nodeValue.match(/^(click1|click2)$/)){
var n=t.previousSibling;
while(n){
if(n.nodeName=="FORM") break;
n=n.previousSibling;
}
n.submit();
}
}
e.preventDefault();
}
</script>
<form action="test.html">
<input type="text" name="textvalue" value="1">
</form>
<a href="#">click1</a>
<form action="test.html">
<input type="text" name="textvalue" value="2">
</form>
<a href="#">click2</a>

投稿日時 - 2009-12-17 22:51:09

お礼

回答ありがとうございます。

clickイベントが起きた時に、直前のフォームを送信するということでしょうか。勉強になりました。

投稿日時 - 2009-12-18 11:46:12

ANo.3

#1 です

No2様の方がベターです。

投稿日時 - 2009-12-17 20:23:36

ANo.1

下記でどうでしょう?

function sendform(formname){
tmp = eval("document." + formname);
tmp.submit();
}

投稿日時 - 2009-12-17 19:54:20

お礼

回答ありがとうございます。

eval関数は他にもいろいろ使えそうですね。

投稿日時 - 2009-12-18 11:32:22

あなたにオススメの質問