ママのスキンケアのお悩みにおすすめアイテム

jspに
<form action="XXaction" method="post">
<a href="XXaction" onclick="setData()">○○△</a>
<input type="submit" value="○○" onclick="setData()">
</form>
のように記述してます。
(実際はonclickのjavascriptも実装してます)
ボタンを押すとpostとしてサブミットされるのに、
リンクをクリックするとgetでサブミットされます。
1.なぜgetになるのでしょうか?
2.どうしたらpostで飛ばせるでしょううか?

A 回答 (6件)

<Script Language = "JavaSpcript">


function setData(){
    document.form.submit();
}
</Script>

<form name = "form" action = "XXaction" method = "post">
<a href = "JavaScript:setData()">
</form>


これでどうでしょうか。

windows.document.フォーム.submit

ですが、「form」にname属性でnameを付けてやらなければ指定できませんのであしからず。。。

ちなみに、actionの「XXaction」にとびますので。

この回答への補足

それを実は実装してたんですけど。
微妙に違うかもしれないので、もう一度確認します。
<form name="frm" action="XXAction" method="post">
<a href="JavaScript:setData()">○○</a>
</form>
<script language="Javascript">
function setData(){
alert("OK");
document.frm.submit();
}
</script>
みたいな実装です。

補足日時:2006/06/23 08:53
    • good
    • 0
この回答へのお礼

alertは出るんですが、submitされないみたいです。
alertをsubmitの後に書いても出ました。
なぜsubmitされないのでしょうか・・・

お礼日時:2006/06/23 09:28

JavaScriptが動いているということですが、


JavaScriptのエラーはステータスバーに表示されますか?

その場合、submitしている文に問題があります。

この回答への補足

エラーは出てません。

補足日時:2006/06/22 17:57
    • good
    • 0
この回答へのお礼

すいませんでした。
皆様ありがとうございました。
全くもって、私のミスでした。
document.frm.submit;
となってました。
document.frm.submit();
にしました。
お時間とらせてしまい、誠に申し訳ありませんでした。

お礼日時:2006/06/23 10:07

setDataは、その別プロジェクトとまったく同じjavascriptなのですか?

この回答への補足

いいえ。
同じように記述してるつもりなだけです。。
strutsを使ってる方
<html:link href="#" onclick="サブミットするjavascript">○○○
</html:link>
今作ってるもの
<a href="JavaScript:サブミットするjavascript">○○○</a>
という感じです。
変換されたhtmlの違いはhref="#"かどうかくらいだと思ってました。

補足日時:2006/06/22 15:45
    • good
    • 0

<a href ="JavaScript:setData()">



と。<a href>タグの中からJavaScriptを動作させたい場合はこうなります。

この回答への補足

やってみましたが、javascriptは動きますが、サブミットされてないようです。
javascriptでalertは出るので、動いてる確認は取れてます。
window.document.フォーム.submit();
とやってるんですけどね・・・。

補足日時:2006/06/22 15:23
    • good
    • 0

1.Aタグの遷移は必ずGETです。


2.javascriptでformをsubmitします。
window.forms[0].submit();

この回答への補足

>Aタグの遷移は必ずGETです。
ということは、別プロジェクトのストラッツを使ってるjspはなぜpostになるのか疑問ですが、ありがとうございます。
submitしてますが、どうにも動いてくれませんです。

補足日時:2006/06/22 15:26
    • good
    • 0

JSPはあんまり関係ない気もしますが・・



1.AタグはFORM部品ではないので、FORMタグ内にあっても関係ありません。hrefへ遷移するだけ。

2.Aタグのhrefは削除
  onclick内でFORMをsubmitさせるようする
    • good
    • 0
この回答へのお礼

jspに関係あると思ったのは、strutsを使ってる別プロジェクトのjspでは
<a href="#" onclick="サブミットするjavascript">
で、postで動作してくれてたからです。
Aタグのhrefを削除ということは
<a onclick="サブミットするjavascript">
リンク文字
</a>
のようにすることでしょうか?
これだと、jspを開いたときにリンク文字にカーソルをあてても指型にかわらず(下線がない)、onclickが発生してくれませんでした。さきほども試しましたがダメでした。

お礼日時:2006/06/22 15:04

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

このQ&Aと関連する良く見られている質問

Qリンクをクリックした時にformからPOST送信したい。

HTML、PHP、JavaScript等でサイトを作っているのですが・・・。

【実現出来ている例】
<form name="form1" method="post" action="Next.php" onSubmit="return InputCheck()">
 <input type="submit" value="送信">
</form>
 submitボタンを一つ置いて、それがクリックされた場合に
formの内容をPOSTで送信する。

【実現したい例】
<form name="form1 method="post">
 <a href="Next.php" onClick="???">???</a>
</form>
 formの中のリンクをクリックされた場合に、formの内容を
POSTで送信したいのですが、その実現方法がわかりません。
GETで送るという手もあり得ますが、今回はどうしてもPOST
したいのですが。

Aベストアンサー

<form name="form1" method="post" action="Next.php">
<a href="#" onClick="document.form1.submit();">???</a>
</form>

onclick内の対象がform1としてあてているので、
アンカータグは別にform内に記述しなくても大丈夫です

form内にhidden等でnameとvalueを持ったパラメータがあればそれも送られます

アンカータグから動的にvalueを変更したい場合は、
document.form1.hogename.value = 'hoge';
等をsubmit()の前に行えば可能です

ただしform内に
<input type="hidden" name="hogename" value="">
を記述する等、変更先パラメータの元を用意する必要がありますのでご注意下さい

Qページ読み込み時に自動的にsubmitさせる方法

過去のPHPでの質問
http://www.okweb.ne.jp/kotaeru.php3?q=483327
の中で出てきた

>hiddenでデータ定義しておいて
>Javascriptでページ読み込み時に自動的にsubmitさせたらいいかも。

POSTでデータを送るためにこれを実現したいと思っているのですが自動的にsubmitさせる方法がわかりません。

ご存知の方がおられましたらアドバイス宜しくお願いします。

Aベストアンサー

<BODY onLoad="document.F.submit();">
とやれば、このファイルがロードされた時に、
このファイル内の
<FORM NAME=F>~</FORM>
と定義されたFORMの内容がsubmitされると思いますが・・・。

QPOSTで

POSTで
<a href=sample.cgi?md=aa&tx=zz~>hoge</a>
<a href=sample.cgi?md=bb&tx=yy~>hoge2</a>
<a href=sample.cgi?md=cc&tx=xx~>hoge3</a>
<a href=sample.cgi?md=dd&tx=ww~>hoge4</a>

を送る方法でjavascriptとの組み合わせで出来るのかな?
と思い検索したら

<form action="./sample.cgi" method="POST" name="post">
<input type="hidden" name="md" value="aa">
<input type="hidden" name="tx" value="zz">
          :
<a href='#' onClick="document.post.submit();return false">hoge</a>
<form action="./sample.cgi" method="POST" name="post2">
<input type="hidden" name="md" value="bb">
<input type="hidden" name="tx" value="yy">
          :
<a href='#' onClick="document.post2.submit();return false">hoge2</a>

このような手法が見つかりました
これだと行数が多くなり、なんとなくすっきりしません
どなたかいい解決方法を教えてください
よろしくお願いします

POSTで
<a href=sample.cgi?md=aa&tx=zz~>hoge</a>
<a href=sample.cgi?md=bb&tx=yy~>hoge2</a>
<a href=sample.cgi?md=cc&tx=xx~>hoge3</a>
<a href=sample.cgi?md=dd&tx=ww~>hoge4</a>

を送る方法でjavascriptとの組み合わせで出来るのかな?
と思い検索したら

<form action="./sample.cgi" method="POST" name="post">
<input type="hidden" name="md" value="aa">
<input type="hidden" name="tx" value="zz">
          :
<a href='#' onClick="document.post.submit();return...
続きを読む

Aベストアンサー

JavaScriptオフの場合を考えないなら、このように書けます。


<!-- フォーム -->
<form action="sample.cgi" method="post" name="form1">
<input type="hidden" name="md">
<input type="hidden" name="tx">
</form>


<!-- スクリプト -->
<script type="text/javascript"><!--
function Post(md, tx) {
  form1.md.value = md;
  form1.tx.value = tx;
  form1.submit();
}
//--></script>


<!-- リンク -->
<a href="javascript:Post('aa', 'zz')">hoge</a>
<a href="javascript:Post('bb', 'yy')">hoge2</a>

QonClickに複数の関数を挿入する方法

初心者なのですがアニメーションの関数anime1、anime2、anime3を作成し、onClickに下記のように設定しました。
クリックするとアニメーション2つの設定ではは動くのですが、3つ目を設定すると動かなくなります。
通常はこのような設定はしないものなのでしょうか?
教えてください。
よろしくお願いします。
<INPUT type="button" value="START" onClick="anime1(), anime2()">・・・OKです。
<INPUT type="button" value="START" onClick="anime1(), anime2(),anime3()">・・・動きません。

Aベストアンサー

セミコロンでつなぐのが常道ですが、3つ以上なら
別途function化したほうが、可読性が高くなると
思います。

QonClickで関数呼出し後に、結果に応じてsubmitを実行する方法

JavaScriptで、
function func() {
 if (a==0) {
  alert("処理しない");
  return false;
 }
 return true;
}
と、a=0ならfalseを返し、それ以外ならtrueを返す関数を定義しています。

そして、FORMタグで
<FORM NAME="FormName" ACTION="next.html">
<INPUT TYPE="button" VALUE="next" NAME="button1" onClick="return func();submit();">
</FORM>
と記述しています。
要は、ボタンを押下した際にfunc関数がtrueを返せば、next.htmlに
遷移させたいのですが、上記記述では、遷移しません・・・
onClick部分にonClick="return func(),submit();"と記述した場合、
func関数の実行結果がtrueでもfalseでも遷移してしまいます。
そこで、なんとなくonClick="return func()&&submit();"と記述してみたところ、
func関数がtrueの時のみうまく遷移するようになりました。

これは偶然そう動作しているのでしょうか、それとも上記は正しい記述方法なのでしょうか?
正しい記述方法ならいいのですが、上記以外に正式な記述方法があれば
教えていただけないでしょうか?

※TYPE="submit"にすればいいとは思うのですが、buttonで実現したいと
考えております。

JavaScriptで、
function func() {
 if (a==0) {
  alert("処理しない");
  return false;
 }
 return true;
}
と、a=0ならfalseを返し、それ以外ならtrueを返す関数を定義しています。

そして、FORMタグで
<FORM NAME="FormName" ACTION="next.html">
<INPUT TYPE="button" VALUE="next" NAME="button1" onClick="return func();submit();">
</FORM>
と記述しています。
要は、ボタンを押下した際にfunc関数がtrueを返せば、next.htmlに
遷移させたいのですが、上記記述では、遷移しませ...続きを読む

Aベストアンサー

3つのパターンをみる限り、理由は以下の通りと思います。
1.セミコロン(;)で区切った場合、
この場合、「return func();」と「submit();」とは別の文です。returnはその時点の値を戻して、それ以降の動作を打ち切ってしまいます。よって、onClickイベントはfuncメソッドの戻り値(true/false関係なく)を戻して、そこで終了、それ以降のsubmitは実行しないとなります。

2.カンマ(,)で区切った場合、
この場合、「return func(),submit();」が1つの文となります。この「,」は、左右の式を評価して、右式を結果とする演算子です。よって、funcメソッド、submitメソッド両方を評価するため、funcメソッドの戻り値に関係なく、submitされます。

3.&&で区切った場合、
論理演算子「&&」は、左右ともにtrue(0以外)の場合のみtrueとする演算子です。また、2項論理演算子は左式から評価し、左式だけで全体の結果がわかる場合、右式を評価しません。よって、funcメソッドがfalseを戻した場合、その時点でsubmitを評価しなくても演算結果は必ずfalseとなるのでそこで打ち切られ、trueを戻した場合、submitを評価しないと演算結果を得られないため、遷移したわけです。「&&」を「||(論理和)」に変更すると逆の結果得たと思います。

さて、では3の「&&」が正しいかと言われたら、文法上は正しいです。ただし、他人がみてわかるとは思えません。
そこで、以下の記述はいかがでしょう。読んでみてソースを理解できますか。


<FORM NAME="FormName" ACTION="next.html">
<INPUT TYPE="button" VALUE="next" NAME="button1" onClick="func()">
</FORM>

(中略)

// funcの定義
function func() {
 if (a==0) {
  alert("処理しない");
  return ;
 }
 document.FormName.submit();
}

要は、ボタンを押されたら、funcを呼び出せ。
funcでは、aが0ならば、そこで終了しろ。
そうでなければ、documentオブジェクト内のFormNameと言う名前のオブジェクトのsubmitメソッドを呼べ。
です。

3つのパターンをみる限り、理由は以下の通りと思います。
1.セミコロン(;)で区切った場合、
この場合、「return func();」と「submit();」とは別の文です。returnはその時点の値を戻して、それ以降の動作を打ち切ってしまいます。よって、onClickイベントはfuncメソッドの戻り値(true/false関係なく)を戻して、そこで終了、それ以降のsubmitは実行しないとなります。

2.カンマ(,)で区切った場合、
この場合、「return func(),submit();」が1つの文となります。この「,」は、左右の式を評価して、右...続きを読む

QonClickとsubmitの処理順序

#過去ログをあたりましたが、自分で納得いく解答がなかったので質問します。

フォームのsubmitボタンにonClickでチェッカーなどの関数を与えた場合、
submitでフォーム内容を送信するのと、onClickで指定されている関数の
どちらが先に処理されるのでしょうか。
(一応、WindowsのIE、ネスケ共々、onClickの処理の後、submitされるようではあります)

function tasikame {
(フォームの内容チェック/中略)
alert("入力されていない項目があります")
}

例えば、このような関数をonClickで起動する場合、フォームに入力されていない
項目があると、警告されます。
この時、submitはどの環境でも起動しないで終わるのでしょうか。
それとも警告が起動した後、フォーム内容はsubmitされてしまうのでしょうか。

#分かりづらければ、補足しますのでどうぞよろしく。

Aベストアンサー

> 例えば、このような関数をonClickで起動する場合、フォームに入力されていない
> 項目があると、警告されます。
> この時、submitはどの環境でも起動しないで終わるのでしょうか。
> それとも警告が起動した後、フォーム内容はsubmitされてしまうのでしょうか。

この関数の書き方だと、警告のメッセージボックスが表示され、OK を押すと、フォームの
内容は submit されます。

イベントハンドラでは、false を返すことで、本来の動作をキャンセルすることができます。
ですから、期待する(であろう)動作をするためには、

function tasikame {
 //フォームの内容チェック
  ...

 if ( フォームの内容が正しくなければ ) {
  alert("入力されていない項目があります");
  return false;
 } else {
  return true;
 }
}

というような書き方になります。

Qstrutsのhtml:linkの使い方

html:linkを使用してJSPを表示した際に、前のフォームのプロパティ値(ここではstaffNumberの値)を取得したいのですが,うまくいきません。
同じ処理をhtml:submitで実行すると取得できています。
その違いを教えて頂きたいのです。
以下がそのコードです。

【struts-config】
<form-bean dynamic="true" name= "loginForm" type="org.apache.struts.validator.DynaValidatorForm">
<form-property name = "staffNumber" type= "java.lang.String" />
</form-bean>
<action name="loginForm" path="/login" scope="request" type="login.action.LoginAction"
validate="false">
<forward name="success" path="/login.jsp" />
</action>

【login.jsp】
<html:form action="/login">
 <html:text property="staffNumber" size="10"maxlength="8"/>
<html:link action="/login">testlink</html:link>
<html:submit value="test"/>
</html:form>

【LoginAction】
public class LoginAction extends Action{
public ActionForward execute (ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res) throws Exception{
DynaValidatorForm loginForm =(DynaValidatorForm) form;
String staffNumber=(String)loginForm.get("staffNumber");
System.out.println(staffNumber);
return (mapping.findForward("success"));
}
}
linkの処理で同じJSPを表示していますが,前のプロパティ値を取得しているかをログで確認する事を優先しているのでそのようにしています。
質問の意味がわからない、ソースの不足等ありましたら御指摘下さい。
宜しくお願いします。

html:linkを使用してJSPを表示した際に、前のフォームのプロパティ値(ここではstaffNumberの値)を取得したいのですが,うまくいきません。
同じ処理をhtml:submitで実行すると取得できています。
その違いを教えて頂きたいのです。
以下がそのコードです。

【struts-config】
<form-bean dynamic="true" name= "loginForm" type="org.apache.struts.validator.DynaValidatorForm">
<form-property name = "staffNumber" type= "java.lang.String" />
</form-bean>
<action name="loginForm" pat...続きを読む

Aベストアンサー

html:link は、a 要素のタグを生成するので、単に遷移するのみです。フォームをサブミットするわけではありません。
html:submit は、いわゆるサブミットボタンを生成するので、フォームをサブミットするわけです。

Qsubmit時に違うページに飛びたい

アンケートに答えて頂いた方がsubmitを押すと、
ありがとうメッセージのページに飛ぶということがやりたいのです。
尚、メール送信に問題はないのですがページが移動しない状況です。
どなたか、私の間違いを教えていただけますか?

<script language="JavaScript">
<!--
function move(url){
window.location=a.html;
}
--></script>
<form action="mailto:info@○○.co.jp" method="post" enctype="text/plain" name="form1" onSubmit="javascript:move()">
</form>

と打ちまして、その後
function move(){
window.location("a.html");
}
と変えてもダメでした。

これがだめなら「ありがとう」とアラートと出して置いて、このページろリロードする方法でも良いです。

どなたか教えていただけますか?
宜しくお願い致します!!!

アンケートに答えて頂いた方がsubmitを押すと、
ありがとうメッセージのページに飛ぶということがやりたいのです。
尚、メール送信に問題はないのですがページが移動しない状況です。
どなたか、私の間違いを教えていただけますか?

<script language="JavaScript">
<!--
function move(url){
window.location=a.html;
}
--></script>
<form action="mailto:info@○○.co.jp" method="post" enctype="text/plain" name="form1" onSubmit="javascript:move()">
</form>

と打ちまして、その後
funct...続きを読む

Aベストアンサー

単純にこういう感じではどうですか?
<form action="mailto:info@***.jp" method="post" onSubmit="window.location.href('http://www.google.co.jp/')">
<input type=submit value="メール">
</form>

Qhiddenのvalueの値を変えたい

おはようございます。
教えていただきたいことがあります。
HTMLのほうに
<input type="hidden" name="btn" value="">
と書きます。
それでJavaSctiptのfunctionの中で
document.forms[0].btn.value=funcitonの引数;
とやっているのですが、hiddenのvalueの中に値が入っていないようです。
どうしてでしょうか?
こういう使い方ってできないものなのでしょうか?

宜しくお願いします。

Aベストアンサー

functionから値を設定できるはずですよ。

「forms[0]」ありますが、複数フォームを定義したりはしていないでしょうか?
直接、フォーム名を記述した方が、安全かもしれません。

下記のように作成すれば、動作しました。


<html>

<head>
<script type="text/javascript">
<!--
function setVal(val) {
document.forms.test_form1.btn.value=val
document.forms.test_form1.txt.value=val
}
// -->
</script>
</head>

<body onload="javascript:setVal('abc')">
<form name="test_form1">
<input type="hidden" name="btn" value="">
<input type="text" name="txt" value="">
</form>
</body>

</html>

functionから値を設定できるはずですよ。

「forms[0]」ありますが、複数フォームを定義したりはしていないでしょうか?
直接、フォーム名を記述した方が、安全かもしれません。

下記のように作成すれば、動作しました。


<html>

<head>
<script type="text/javascript">
<!--
function setVal(val) {
document.forms.test_form1.btn.value=val
document.forms.test_form1.txt.value=val
}
// -->
</script>
</head>

<body onload="javascript:setVal('abc')">
<form name="test_form...続きを読む

QIOException ってどういうときに起こるのでしょうか?

IOException ってどういうときに起こるのでしょうか?

http://www.atmarkit.co.jp/fjava/rensai2/javaent12/javaent12.html
を見て勉強しています。

  catch ( IOException e) {
    System.out.println( "キーボードが故障しているのかもしれません" );
  }

と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「

NumberFormatException の方はわかるのですが・・・

Aベストアンサー

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。

さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。

追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}

追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む


人気Q&Aランキング