アプリ版:「スタンプのみでお礼する」機能のリリースについて

<FORM METHOD="post" ACTION="tbl_admin.html">
<A HREF="#" onClick="fnc.value='abc'; this.form.submit();">リンク文字</A><BR><BR>
<INPUT TYPE="hidden" NAME="fnc" VALUE="">
<INPUT TYPE="submit" VALUE="aaa">
</FORM>

と書いてみたのですが
エラー:'this.form' は Null またはオブジェクトではありません。
としまいました。
<SELECT>のonChangeで同じような事は出来たのですが、
単なるリンク文字クリックでこのようなことはできないのでしょうか。

可否をご存知の方、また実現方法等ご存知の方
いらっしゃいましたらご教示願います。
よろしくお願い致します。

A 回答 (2件)

#1さんの補足ですが、アンカー(a)要素はformの中に入れても


従属関係にはないので上位のformにアクセスすることはできません。
#1さんの解説ではformにformという名前をつけていますが、
場合によっては名前の競合が発生するのでなるべくタグ名と
同じ名前を使わない方がよいでしょう。
また、allでアクセスするのはあまりお勧めできませんので、
やるならdocument.forms[フォーム名]もしくはdocument.フォーム名
でやるか、nameではなくidをつかってdocument.getElementById(id名)
でやるとよいでしょう。

<FORM METHOD="post" ACTION="tbl_admin.html" name="form1">
<A HREF="#" onClick="f=document.form1;f.fnc.value='abc'; f.submit();">リンク文字</A><BR><BR>
<INPUT TYPE="hidden" NAME="fnc" VALUE="">
<INPUT TYPE="submit" VALUE="aaa">
</FORM>

この回答への補足

なるほど、アンカーはFORMとの従属関係がないから
フォームを動かすには外からの場合と同様に
明示的に示さなくてはならないのですね。
勉強になりました。

補足日時:2006/11/21 13:21
    • good
    • 0

エラーの内容からすると「エラー:'this.form' は Null またはオブジェクトではありません。


ですから、formオブジェクトがちゃんと認識できていないみたいです。

そこで二つ対処をしました。
1)formにnameを付けてdocument.all(フォーム名)でオブジェクトを特定した。
2)<a></a>タグのonclickからなにも返却しないと、hrefパラメータの箇所へ遷移するので、
  onclickイベントの戻り値をfalseにした。

サンプルとしては以下です。
------------- LinkSubmit.html -----------------
<html>
<head>
<title>リンクサブミットHTML</title>
<script language=javascript>
</script>
</head>
<body>
<form name=form method="POST" action="./event.html">
<!--<a href='' onclick="fnc.value='abc'; this.form.submit();">リンク文字</a><br><br>-->
<a href='#' onclick="document.all('form').fnc.value='abc'; document.all('form').submit();return false;">リンク文字</a><br><br>
<input type="hidden" name="fnc" value="">
<input type="submit" value="aaa">
</form>
</body>
</html>


≪質問は受付中のままにしないで必ず締め切りましょう≫

この回答への補足

FORMに名前をつけてフォーム名から指定したら思うように動きました。

いつもフォームの外から弄る時はフォーム名をつけて、
フォーム内でしか弄らないときはフォーム名をつけていなかったもので。。
ありがとうございました。

補足日時:2006/11/21 12:39
    • good
    • 0

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