
画像のように2回同じように打つとアラートを出すようなプログラミングを作ろうとしてます。
let Exist = new Array();
while(true){
let msg = "";
let inp = inputs;
console.log(inp)
if(Exist[inp]){
msg = inp+"は既に存在します";
}else{
msg = inp+"は存在しないのでExistに登録します";
Exist[inp] = true; // false; //
}
alert(msg);
}
inputsにテキストの要素を入れています。2回同じことを打つと
if(Exist[inp]){
msg = inp+"は既に存在します";
}
のイベントを起こしたいのですが今のままだと1回目で
if(Exist[inp]){
msg = inp+"は既に存在します";
}
のイベントが起きてしまいます。
どうすれば2回目以降でこのイベントを発生できるかを教えてください。
サンプルコードでいいのでよろしくお願いします。

No.13ベストアンサー
- 回答日時:
No10です。
No11さん、ありがとうございました。
わたしも最初、他の回答者さんへのコメントはいいのか迷いましたが、
https://blog.goo.ne.jp/oshietegoo/e/8b3c38e5134b …
ガイドライン上は、
>質問者の疑問や問題の解決に寄与するようなものではない、他の回答者へ向けたコメント。
がダメであり、
No2のサンプルコードから、No10へ
ブラッシュアップしていただいたおかげで、
最終的に質問者さんの解決に寄与するものとなり、
ガイドラインに適合すると考えます。
質問者さんの
>どうすれば2回目以降でこのイベントを発生できるか
への回答は、要点としては、
・focusout発火のイベントを、inputではなく、documentに追加する
・比較したい値を配列に格納する
・上記配列を、some関数で、e.target.valueの値と照合する
・自分自身と照合しないために、事前に自分だけは空にしておく
といった感じになるのではと思います。
わたしの当初の回答では不備があったと思いますが、
今回は知らない用語や、関数、バブリングフェーズなど、
大変勉強になりました。
No11さん、ありがとうございました。
No.12
- 回答日時:
#質問者置き去りな者です
Inputs.filter (f=> e != f).map (e => e.value)
--
const は除いて1行で!?
document.addEventListener ('focusout', ({target: e}, V)=>
Inputs.includes (e) && (
e.value = isNaN (V = parseInt (e.value, 10) + '')
? ''
: (Inputs.filter (f=> e != f).map (e => e.value).some ( v => v == V) && (
alert (V + 'はすでに存在します'),
e.focus ()
), V)
)
);
No.11
- 回答日時:
#質問者置き去りな者です
人間が入力するであろうデータには、チェックが必要です。
(数値の後に空白文字とか・・・)
それにしても素晴らしいですね!相当できる方なのですね。
失礼しました。
({target: e})=> {
・・・
}
次はショートコーディングでもいかがですか?(w)
No.10
- 回答日時:
No6です。
No7-9さん、ありがとうございます。
こんな感じでどうでしょう。
<input type="text" name="inputs" value="" /><br />
<input type="text" name="inputs" value="" /><br />
<input type="text" name="inputs" value="" /><br />
<a href="#">ダミーアンカー</a><br />
<input type="text" name="inputs" value="" /><br />
<input type="text" name="inputs" value="" />
<script>
const Inputs = [...document.querySelectorAll('input[name="inputs"]')];
document.addEventListener('focusout', (e) => {
let val = e.target.value;
let isNotTarget = !(Inputs.includes(e.target));
let isBlank = (val === '');
if (isNotTarget || isBlank) { return };
if (isNaN(val)) {
// 数字以外入力時の処理
}
e.target.value = '';
let isDouble = Inputs.map(e => e.value).some(v => v === val);
if (isDouble) {
alert(val + 'はすでに存在します');
e.target.focus();
} else {
e.target.value = val;
}
});
</script>
No.8
- 回答日時:
#5 です
1つ言い忘れてました。
document でイベントを監視するときは、e.target が アンカータグでも反応します。それが対象要素なのかもチェックが必要です
No.7
- 回答日時:
#5です
すっきりしてきましたね。
isNan はタイポでしょうか?
getElementsByName に拘っているの?
以下の時点で配列化しておく
const Inputs = [...document.querySelectorAll('****')];
"e.target.value" の出現回数が多いです。タイポにつながります
余談ですがこれはどう?
Inputs.map (e=> e.value).every (v=> v==???)
No.6
- 回答日時:
No4です。
No5さん、ご指摘ありがとうございます。
修正しました。
こんな感じでどうでしょう。
<input type="text" name="inputs" value="" /><br />
<input type="text" name="inputs" value="" /><br />
<input type="text" name="inputs" value="" /><br />
<input type="text" name="inputs" value="" /><br />
<input type="text" name="inputs" value="" />
<script>
const Inputs = document.getElementsByName('inputs');
const Exist = new Array(Inputs.length).fill(null);
document.addEventListener('focusout',(e)=>{
if(isNan(e.target.value)){
// 数字以外入力時の処理
}
let idx = [...Inputs].indexOf(e.target);
Exist[idx] = null;
if(Exist.includes(e.target.value)){
alert(e.target.value + 'はすでに存在します');
e.target.value = '';
}
Exist[idx] = (e.target.value === '')? null : e.target.value;
});
</script>
No.5
- 回答日時:
#3です
質問者は”数字”と言っています。範囲が決められていません。
例えば最初の要素に1を入力して、次の要素に11を入力しようとすると途中でアラートされます。
Array.includes をご存じですか?
イベントの監視を document からしてみてはどうでしょう?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript javascriptで入力フォームが空欄の時にアラートによるエラーを出すコードを書いています。 2 2023/06/13 17:58
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- JavaScript ソースコードは下の共有コードサイト「張り紙」にあります。 入力フォームの javascript で 1 2022/05/11 11:01
- PHP php ログイン 1 2022/11/01 00:24
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- 英語 北海道大学の問題です。 Lose your memory and you, as you, ceas 3 2023/05/04 21:55
- Excel(エクセル) エクセルVBA Msgboxでの変数の活用 4 2023/07/23 08:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
onClickとsubmitの処理順序
-
JSPとJavaScriptの連携について...
-
Webブラウザにてページのりロー...
-
文末の改行コードを削除したい
-
vbsでフォームに値を入力できない
-
dijit.form.ComboBoxについて
-
日付入力欄の表示形式を自動的...
-
フォームの値が0だったら空白...
-
PDFフォームで条件つき金額を表...
-
<input>の選択肢をプルダウンメ...
-
<JavaScript>tableタグを入力不...
-
プルダウンで選択すると、DBの...
-
【jsp/Java】チェックボックス...
-
ハイパーリンクを別ウインドウ...
-
Visual Studioのデザインでの非...
-
jQuery セレクトボックスで選択...
-
複数のsubmitボタンで押された...
-
selectメニューのselectedの位...
-
return trueとreturn falseの用...
-
画面表示とともにtableの指定の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文末の改行コードを削除したい
-
JSPとJavaScriptの連携について...
-
onClickとsubmitの処理順序
-
日付入力欄の表示形式を自動的...
-
javascriptで入力フォームが空...
-
条件により、リンク先に画面遷...
-
2重でメール入力チェックをした...
-
入力した文字を大文字に変換し...
-
フォームの値が0だったら空白...
-
Javascript 郵便番号の入力欄で...
-
submit後、同じ入力欄に戻らせ...
-
onChangeの使い方について教え...
-
javascriptでのフォーム自動入...
-
Webブラウザにてページのりロー...
-
フォームの<TEXTAREA>で文字数...
-
テキストボックス入力を半角英...
-
テキスト入力フォームの値を画...
-
テキストボックスを無効にする...
-
javaでフォーム入力の確認と文...
-
テキストフィールド入力文字列...
おすすめ情報