🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

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

Q&A

解決済

1回答

2587閲覧

JS setTimeout 関数が動かない

backwimps

総合スコア7

JavaScript

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

0グッド

0クリップ

投稿2019/11/13 16:43

編集2019/11/14 01:42

前提・実現したいこと

valueの値を取得してその値ごとにactionを動的に変え、遷移時にフェードアウトさせようとしているのですが、
sex-age.htmlこのページにおいてvalue="man"を選択しsubmitしたらactionが書き換わり遷移されると思ったのですが、遷移されず同じページに戻されます
if(url.match(/sex-age.html/)){
if(document.sexageform.sex.value == "man"){

document.sexageform.action="/check/point_men.html"; }

ここに引っかかりません、console.logで確認しても値が表示できなかったのでなぜここに引っかからないのかがわかりません。
原因がわかる方がいましたら、教えていただければ幸いです。

###html

<main> <div class="s-contents"> <form method="get" class="form" id="sex-age" name="sexageform" data-validate> <h2 class="s-heading age-heading">あなたの性別は?</h2> <div class="s-radio-box"> <div class="btn corner-border corner-button"> <input id="man" type="radio" name="sex" value="man"> <label for="man" class=" corner-border__inner"> <img src="/check/common/img/man.png" alt="" class="border"> </label> </div> <div class="btn corner-border corner-button"> <input id="woman" type="radio" name="sex" value="woman"> <label for="woman" class=" corner-border__inner"> <img src="/check/common/img/woman.png" alt="" class="border"> </label></div> </div> <h2 class="s-heading">あなたの年齢は?</h2> <div class="age"> <input type="number" name="age" max="60" min="20" placeholder="年齢" id="number" required> </div> <div class="s-btn-line"> <a href="javascript:void(0);" onclick="window.history.back();"><img src="/check/common/img/return.png" alt=""></a> <input type="submit" value="次へ" onclick="puff()" id="next" disabled="disabled"> <div class=""></div> </div> </form> </div> </main>

js

let body = document.getElementsByTagName('body')[0]; function fadeOut() { body.classList.add('bodyfadeout'); } // 遷移先切り分け function linkUrl(){ let url = location.href ; if(url.match(/sex-age.html/)){ if(document.sexageform.sex.value == "man"){ document.sexageform.action="/check/point_men.html"; } else if(document.sexageform.sex.value == "woman"){ document.sexageform.action="/check/point_women.html"; } } else if(url.match(/location.html/)){ if(document.sexageform.sex.value == "venue"){ document.sexageform.action="/check/venue.html"; } else if(document.sexageform.sex.value == "store"){ document.sexageform.action="/check/store.html"; } } else if(url.match(/check.html/)){ location.href = '/check/sex-age.html'; } else if(url.match(/point/)){ document.sexageform.action="/check/location.html"; } } let next = document.getElementById('next'); next.addEventListener('click', function() { fadeOut(); setTimeout(function(){ linkUrl(); }, 300); });

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

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

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

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

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

kei344

2019/11/13 16:48

「ここだけ反応する」が動いているならsetTimeout に登録された関数は動いていますよ。「動きません」とは「何をしたときに」「どうなると思って」「どうなったのか」を、具体的に記述されたほうが回答を得られやすいと思います。
backwimps

2019/11/13 17:09

ご指摘ありがとうございます。 初めてなもので書き方がわからなかったのですが 具体的に書かさせていただきました。
kei344

2019/11/13 17:27

formの内容やクリックイベントを割り当てているボタンによって状況が変わるので、HTMLも追記してください。
backwimps

2019/11/14 01:37

追記いたしました。 どうぞよろしくお願いいたします。
guest

回答1

0

ベストアンサー

type="submit"にクリックイベントを設定しても、(特に止めなければ)通常動作(フォーム送信)もおこります。(setTimeoutが起こる前にページが書き換わる)
フォーム送信の時間をずらすなら、type="button"にして、linkUrl関数内でフォームをsubmit()するのがよいです。

<input type="button"> - HTML: HyperText Markup Language | MDN】
https://developer.mozilla.org/ja/docs/Web/HTML/Element/Input/button

【HTMLFormElement.submit - Web API | MDN】
https://developer.mozilla.org/ja/docs/Web/API/HTMLFormElement/submit

投稿2019/11/14 02:08

kei344

総合スコア69596

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

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

backwimps

2019/11/14 02:29

解決いたしました。 参考まで用意していただきありがとうございます。 この度は解決していただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問