質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

4回答

2764閲覧

【javascript】submitのURLを複数設定したい

hello-

総合スコア12

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/08/31 02:21

編集2018/08/31 02:36

質問にお目通しいただき、ありがとうございます。
1点お知恵をお借りしたいものがございまして、質問をさせていただきます。

■submitのURLを条件分岐したい■
現在、サービスの申し込み画面を作成しております。
サービスには申し込み条件があり、条件をみたしていないお申込みは完了画面にとばないようにしたいです。
そこで、条件聴取項目に紐づけてformの遷移先を変更するスクリプトを書いてみたのですが、どうも動きません。
ほかにもポップアップを出すスクリプトを記述しており、こちらは問題なく動作します。
現在の状況を記載いたしますので、ご確認いただけますと幸いでございます。

html

1<form name="ansform"> 2 <div class="question"> 3 <h2>条件の項目聴取</h2> 4 <select name="form__jyoken" id="jyoken" onchange="jyoken()"> 5 <option value="">お選びください</option> 6 <option value="A">A</option> 7 <option value="B">B</option> 8 <option value="C">C</option> 9 <option value="D">D</option> 10 </select> 11 </div> 12 <!-- 条件外の方にはポップアップでその旨をおしらせ --> 13 <script> 14 function jyoken(){ 15 var val = document.getElementById('jyoken').value; 16 if(val == 'A'){ 17 alert('申し訳ございません。Aの方はサービス対象外です。') 18 } 19 if(val == 'B'){ 20 alert('申し訳ございません。Bの方はサービス対象外です。') 21 } 22 } 23 </script> 24 25<!-- 26中略 27 --> 28 29 <div> 30 <input type="image" src="/img/btnImage.png" value="確認画面へ" onsubmit="sendControl()"> 31 </div> 32 <!-- 遷移先URLの制御スクリプト --> 33 <script> 34 function sendControl(){ 35 var val = document.getElementById('jyoken').value; 36   //条件Aを選択した方は完了画面には遷移させない 37 if(val == 'A'){ 38 document.ansform.action="http://google.co.jp/"; 39 } 40   //条件Bを選択した方は完了画面には遷移させない 41 if(val == 'B'){ 42 document.ansform.action="http://google.co.jp/"; 43 } 44   //それ以外は確認画面へ 45 else{ 46 document.ansform.action="confirm.html"; 47 } 48 } 49 </script> 50 51</form>

javascriptはなかなか学習状況がよくなく、
稚拙な記述になってしまっておりますが、
上級者のみなさまのお知恵をおかりできればと思い、
質問をさせていただきました。

お手数をおかけしますが、なにとぞよろしくお願いいたします!!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lhankor_Mhy

2018/08/31 02:28

document.ansform には何が入っていますか?
x_x

2018/08/31 02:30

ansformはどこから出てきたのでしょうか? 提示コードに重要なところが省略されていませんか?
m.ts10806

2018/08/31 02:36

formのname属性にansformとついていないから動いていないということかも。またはtype="image"の初期値はsubmitだったはずなので色々する前に送信してしまうとか。いずれにしても起きている現象、エラー確認(ブラウザ開発ツール)をして、その結果も質問に追記してください。
hello-

2018/08/31 02:36

ansformは<form name="ansform">に設定しておりました。ご指摘ありがとうございます。
hello-

2018/08/31 02:42

>mts10806さま  エラー表示は特に表示されておらず、フォームがそのまま確認画面に遷移いる状況です。やはり先に送信してしまっているのでしょうか?image以外でも試してみます!
m.ts10806

2018/08/31 02:45

あ、いえ、buttonで試してください。imageまたはsubmitだとevent.preventDefaultを対象の関数冒頭に入れると良いです。
m.ts10806

2018/08/31 02:46

上記だといずれにしても送信しないので 最後にdocument.ansform.submit は入れてくださいね。
Lhankor_Mhy

2018/08/31 03:06

横からすみません。onsubmit属性で指定する時って、どうやってeventオブジェクトを受け取るんでしたっけ……?
think49

2018/08/31 03:34

To: Lhankor_Mhy さん、onsubmit属性内でeventは使えます。<form onsubmit="sendControl(event)">
Lhankor_Mhy

2018/08/31 03:52

ありがとうございます! そうなんですね、勉強になりました。
guest

回答4

0

ベストアンサー

JavaScript

1if(val == 'A'){ 2 alert('申し訳ございません。Aの方はサービス対象外です。') 3} 4if(val == 'B'){ 5 alert('申し訳ございません。Bの方はサービス対象外です。') 6}

この設計、とても使いづらくないですか。

  1. Aを選ぶ→エラー
  2. Bを選ぶ→エラー
  3. Cを選ぶ→エラーなし (ユーザの心の声: 選ぶ前に教えてくれ)

選べない選択肢を用意しておく事がナンセンスです。
「A,Bで申請したいのですが」と問い合わせが来ないように全サービスを選択肢にしてエラーになる事をユーザに確認させる意図があると推察しますが、それなら、ユーザビリティの高い別の対策を講じるべきでは。

  • 選択肢にA,Bを含めず、選択肢付近に「A,Bはサービス対象外の為、申請出来ません」と注意書きを書いておく
  • <option value="B(サービス対象外の為、申請不可)" disabled>

Re: hello- さん

投稿2018/08/31 03:53

think49

総合スコア18162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まず、submitはフォームで起こるのでonsubmitをformに移動

HTML

1<form name="ansform" onsubmit="sendControl()">

elseも抜けてます。

JavaScript

1//if(val == 'B'){ 2else if(val == 'B'){

投稿2018/08/31 02:47

x_x

総合スコア13749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ブラウザ依存かもしれませんが、当方の環境では皆さんの回答に加えて、

js

1 if(val == 'A'){ 2 document.ansform.action="http://google.co.jp/"; 3 return true; 4 }

としないと、動作しませんでした。実行前コンパイルで関数内にreturn文がないと短絡されるのかも……?

投稿2018/08/31 03:33

Lhankor_Mhy

総合スコア36074

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

think49

2018/08/31 03:55 編集

(編集後)回答欄に書こうとして、誤ってコメントしてしまいましたので、本コメントを編集しました。 失礼しました。
guest

0

サブミットの部分は既に回答されているので、条件変更の部分について。idとfunction名は同じにしないほうが良いですよ。
jyoken() ⇒ changeJyoken()
に変更すると動くと思います。
※当方chrome+codepenで再現検証した際にchangeイベントが走りませんでした。

投稿2018/08/31 03:07

編集2018/08/31 03:08
yukihisa

総合スコア672

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問