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

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

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

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

HTML

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

Q&A

解決済

2回答

1151閲覧

JavaScriptでblurとchengeを同時に実装したい

amemiya_poke

総合スコア5

JavaScript

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

HTML

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

0グッド

1クリップ

投稿2022/12/30 00:26

前提

JavaScriptで「"りんご"と入力されたらフォーカスを外す機能」と「"りんご"と入力された後にフォーカスを外すと隣の数字が100になる機能」を用意しました。

実現したいこと

それぞれ一つずつであれば正常に機能するのですが、同時に実装すると後者のみ機能しなくなります。要するに"りんご"と入力したらフォーカスを外しつつ100と入力されるようにしたいです。
原因、解決法として何が考えられるでしょうか?

該当のソースコード

HTML

1<html> 2<head> 3 <meta charset="utf-8"> 4 <script src="script.js"></script> 5</head> 6<body> 7 <input type="text" id="fruit" onkeyup="func1()"> 8 <input type="text" id="number" value="0"> 9</body> 10</html>

JavaScript

1const fruit = document.getElementById("fruit"); 2const func1 = () => { 3 const elem = document.activeElement; 4 if(elem.value == 'りんご') { 5 elem.blur(); 6 } 7} 8 9window.addEventListener('DOMContentLoaded', ()=>{ 10 const list={"りんご":100}; 11 fruit.addEventListener('change',e=>{ 12 if(list[fruit.value]){ 13 number.value=list[fruit.value]; 14 } 15 }); 16});

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

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

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

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

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

Cocode

2022/12/30 03:54

質問者様のコードをコピペしただけなのですが、正常に動作しているようです。 動作確認用サンプル→ https://jsfiddle.net/z4kmf68x/
amemiya_poke

2022/12/30 03:58

コメントありがとうございます! 本当ですね... 動作環境など他に問題が無いか確認してみます。
amemiya_poke

2022/12/30 04:23

やはり動作しません。 Visual Studio CodeでコーディングしてGoogleChromeで確認しています。
guest

回答2

0

ベストアンサー

javascript

1<script> 2document.addEventListener('input',e=>{ 3 if(e.target.matches('#fruit') && fruit.value=="りんご"){ 4 number.value=100; 5 fruit.blur(); 6 } 7}); 8</script> 9<input type="text" id="fruit"> 10<input type="text" id="number" value="0">

投稿2022/12/30 07:36

yambejp

総合スコア117665

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

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

0

HTMLは上から順番に処理されるということで、scriptタグも同様です。

<head>部にあるscriptタグは最初の段階で読み込まれます。 この時点ではhtmlは読み込まれていません。 なので<body>の内容は無視されています。

HTML

1<input type="text" id="fruit" onkeyup="func1()"> 2<!-- このタグが動いたのはonkeyupのせいです。-->

なのでscriptタグの場所はbodyの閉じタグの前に置くか、srcの前にasyncなどを入れるのが普通です。
DOMContentLoadedは使わなくて大丈夫です。

投稿2022/12/30 07:25

suika-

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問