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

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

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

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

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

0回答

579閲覧

typescriptでのお問い合わせバリテーションの実装

rider10

総合スコア11

JavaScript

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

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/06/02 01:16

編集2021/06/02 03:06

Javascriptで製作された問合せフォームのバリテーションをtypesicirpt化しています。
入力のフォーカスが外れたらerrorというclassを.bl_form_itemに付与したいのですがうまく動かない感じです。

typescriptが初めてなので、分かる人がいたら教えて欲しいです。

typescript

1コード 2 3export const setupValidate = (): void => { 4 const form = document.querySelector<HTMLElement>('.js_form'); 5 if(!form) return; 6 const el = document.querySelectorAll<HTMLElement>('.js_validate'); 7 if(!el) return; 8 9 const bindInput: ((this: HTMLElement, ev: FocusEvent) => void)[] = []; 10 11 // ------------------------------------------ 12 // 各種バリデート(エラーならtrueを返すように) 13 // ------------------------------------------ 14 function isRequired(value: string) { 15 if (value === "") { 16 return true;//エラー 17 } else { 18 return false; 19 } 20 } 21 function isAgree(checked: NodeList) { 22 if (checked) { 23 return false; 24 } else { 25 return true; 26 } 27 } 28 function isEmail(value: string) { 29 if (value.match(/.+@.+..+/)) { 30 return false; 31 } else { 32 return true; 33 } 34 } 35 36 //input監視 37 function revolve(item: any) { 38 let _error = false; 39 const _id = item.id; 40 const _val = item.value; 41 42 if (isRequired(_val)) { 43 _error = true; 44 } 45 46 if (_id === "check02") { 47 const _checked = item.checked; 48 if (isAgree(_checked)) { 49 _error = true; 50 } 51 } 52 53 if (_id === "email") { 54 if (isEmail(_val)) { 55 _error = true; 56 } 57 } 58 59 if (_error) { 60 return false; 61 } else { 62 return true; 63 } 64 } 65 66 function inputHandler(e: any) { 67 if(revolve(e.target.parentElement.getElementByTagName("input"))) { 68 e.target.closest(".bl_form_item").classList.remove("error"); 69 } 70 else { 71 e.target.closest(".bl_form_item").classList.add("error"); 72 } 73 } 74 //input 75 for( let i = 0, len = el.length; i < len; i++ ){ 76 bindInput[i] = () => (inputHandler); 77 el[i].addEventListener("blur", bindInput[i]) 78 } 79} 80 81

HTMLはこんな感じです

HTML

1コード 2 3<div class="bl_form"> 4 <form class="bl_form_wrap js_form" action="/send.php" method="post"> 5 <div class="bl_form_introText"> 6 <p class="bl_form_introParagraph"> 7 下記フォームにご記入いただき、個人情報の取り扱いに同意の上、「Confirm」ボタンを押してください。 8 <br> 9 <span class="bl_form_smallText">(*は必須項目です)</span> 10 </p> 11 </div> 12 <div class="bl_form_group"> 13 <div class="bl_form_item"> 14 <div class="bl_form_titleWrap"> 15 <p class="bl_form_title">お名前<sup class="bl_form_required">*</sup></p> 16 <div class="bl_form_message"> 17 <label class="bl_form_messageLabel">必須項目です</label> 18 </div> 19 </div> 20 <div class="bl_form_setUpInputWrap"> 21 <input class="bl_form_setUpInput js_validate" id="name" name="name" type="text" placeholder="例) 山田太郎"> 22 </div> 23 </div> 24 <div class="bl_form_item"> 25 <div class="bl_form_title"> 26 <p class="bl_form_title">電話番号</p> 27 </div> 28 <div class="bl_form_setUpInputWrap"> 29 <input class="bl_form_setUpInput js_validate" id="telephpne" name="telephpne" type="text" placeholder="例) 123-4564-8910"> 30 </div> 31 </div> 32 <div class="bl_form_item"> 33 <div class="bl_form_titleWrap"> 34 <p class="bl_form_title">メールアドレス<sup class="bl_form_required">*</sup></p> 35 <div class="bl_form_message"> 36 <label class="bl_form_messageLabel">必須項目です<br>入力形式が正しくありません</label> 37 </div> 38 </div> 39 <div class="bl_form_setUpInputWrap"> 40 <input class="bl_form_setUpInput js_validate" id="email" name="email" type="text" placeholder="例) placesion.xxxx.co.jp"> 41 </div> 42 </div> 43 <div class="bl_form_item__textArea"> 44 <div class="bl_form_titleWrap"> 45 <p class="bl_form_title">お問い合わせ内容<sup class="bl_form_required">*</sup></p> 46 <div class="bl_form_message"> 47 <label class="bl_form_messageLabel">必須項目です</label> 48 </div> 49 </div> 50 <div class="bl_form_setUpInputWrap"> 51 <textarea class="bl_form_setUpTextArea js_validate" id="message" name="message" placeholder="ここにお問合せ内容を入力してください"></textarea> 52 </div> 53 </div> 54 <div class="bl_form_checkAndConfirm"> 55 <div class="bl_form_item__checkBox"> 56 <div class="bl_form_checkboxWrap"> 57 <input class="bl_form_checkbox js_agree" id="check02" type="checkbox" value="1"> 58 <label class="bl_form_checkboxLabel" for="check02"></label> 59 <p class="bl_form_checkboxButton"> 60 <a class="bl_form_checkboxPrivacy" href="/privacy-policy" target="_blank">個人情報の取り扱い</a> 61 <p class="bl_form_checkboxAgree">に同意する</p> 62 </span> 63 </div> 64 </div> 65 <div class="bl_form_item__send"> 66 <a href="#" class="el_linkBtn js_largeRollText"> 67 <p class="js_rollContent hl_splitTextGap">Confirm</p> 68 </a> 69 </div> 70 </div> 71 </div> 72 </form> 73 </div>

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問