Q&A掲示板を作成していて名前とメッセージが送信可能条件を満たしていない場合、ボタンの色を変更させたいと考えております。
disabled プロパティで色の変化を付けており以前は表示されていたのですが、コードを変更したところ表示されなくなってしまいました。
アドバイスお願い致します。
※表示されていたころのコード
<div class="post-button"><!-- ボタンを押せなくする -->
<button type="submit" id="submit_button" name="mode" value="confirm">表示画面へ進む</button>
</div>
<script>
function validation_submit(f) {
const submit = document.getElementById("submit_button");
/* 判定は逆なので、逆に渡す */
submit.disabled = f ? false : true;
};
function validation_text(parts) {
/* このpartsグループの、inputを抽出 */
let text = parts.getElementsByClassName('input')[0];
/* 最小チェック */
if (text.value.length == 0) {
return false;
}
/* 最大チェック */
if (text.value.length >= text.dataset.length) {
return false;
}
return true;
};
/* バリデーション条件判断部分 */
function validation() {
let parts = document.getElementsByClassName('parts');
let submit = true;
for (let i = 0; i < parts.length; i++) {
if (validation_text(parts[i]) != true) {
submit = false;
}
}
validation_submit(submit);
};
/* 文字数表示 */
document.addEventListener('input', e => {
if (!['name', 'message'].includes(e.target.id)) return;
const
t = e.target,
m = t.nextElementSibling,
n = t.value.length - (t.dataset.length | 0),
c = document.createElement('span');
c.append(Math.abs(n));
m.style.color = n > 0 ? 'red' : 'black';
m.replaceChildren(n > 0 ? '' : '残り', c,
`文字${n > 0 ? '超過してい' : '入力でき'}ます。`);
/* 毎回判定によるボタン制御 */
validation();
});
/* 初回判定のボタン制御 */
validation();
};
document.addEventListener("DOMContentLoaded", init);
</script>
※表示されなくなってしまったコード
<div class="post-button"><!-- ボタンを押せなくする -->
<button type="button" id="input_button" name="mode" value="confirm">確認画面へ進む</button>
</div>
<!-- type、name、id、valueの順番 -->
<script>
function validation_submit(f) {
const submit = document.getElementById("input_button");
/* 判定は逆なので、逆に渡す */
submit.disabled = f ? false : true;
};
function validation_text(parts) {
/* このpartsグループの、inputを抽出 */
let text = parts.getElementsByClassName('input')[0];
/* 最小チェック */
if (text.value.length == 0) {
return false;
}
/* 最大チェック */
if (text.value.length >= text.dataset.length) {
return false;
}
return true;
};
/* バリデーション条件判断部分 */
function validation() {
let parts = document.getElementsByClassName('parts');
let submit = true;
for (let i = 0; i < parts.length; i++) {
if (validation_text(parts[i]) != true) {
submit = false;
}
}
validation_submit(submit);
};
const init = function () {
set_attach_event();
document.getElementById("input_button").addEventListener("click", input_button_click);
/* 文字数表示 */
document.addEventListener('input', e => {
if (!['name', 'message'].includes(e.target.id)) return;
const
t = e.target,
m = t.nextElementSibling,
n = t.value.length - (t.dataset.length | 0),
c = document.createElement('span');
c.append(Math.abs(n));
m.style.color = n > 0 ? 'red' : 'black';
m.replaceChildren(n > 0 ? '' : '残り', c,
`文字${n > 0 ? '超過してい' : '入力でき'}ます。`);
/* 毎回判定によるボタン制御 */
validation();
});
/* 初回判定のボタン制御 */
validation();
};//const init = function () の終了
}; //const set_attach_event = function () の終了
//DOM構築、スタイルシート、画像、サブフレームの読み込みが完了した後に発生する
window.addEventListener("DOMContentLoaded", init);
</script>
No.2ベストアンサー
- 回答日時:
No1です。
>※エラー文
>Uncaught ReferenceError: init is not defined
どこで発生しているのか、記載がありませんが、ご提示のスクリプトの中であれば
>window.addEventListener("DOMContentLoaded", init);
で発生しているものと推測します。
仮にそうだとして、その直前に、
>}; //const set_attach_event = function () の終了
とありますが、ご提示のスクリプトには、この閉じカッコに対応するカッコがありません。
コメントから推測して、もしかすると、
set_attach_event = function () {
・・・
const init = function () { ・・・ }
・・・
}
window.addEventListener("DOMContentLoaded", init);
のような構成になっているのではないでしょうか?
そうであるなら・・・
最後の一文の実行時には、initは定義されていませんし、そもそもスコープとして参照外になっているものと推測します。
記載していない他の部分があるようなのでなんともわかりませんけれど、仮に実行して定義済みであったとしても、initはset_attach_event関数の内部スコープにあるので、そのセンテンスからは参照できないはずと思います。
その他の補足説明に関しては、ご質問文に何も記載がないものに関する内容と思われますので、質問者様にしかわからない内容になっています。
当方には推測のしようもありません。
Q.コメントから推測して、もしかすると、
set_attach_event = function () {
・・・
const init = function () { ・・・ }
・・・
}
window.addEventListener("DOMContentLoaded", init);
のような構成になっているのではないでしょうか?
A.アドバイスありがとうございます、fujillin さんのおっしゃる通りでした。
Q.最後の一文の実行時には、initは定義されていませんし、そもそもスコープとして参照外になっているものと推測します。
記載していない他の部分があるようなのでなんともわかりませんけれど、仮に実行して定義済みであったとしても、initはset_attach_event関数の内部スコープにあるので、そのセンテンスからは参照できないはずと思います。
Q.説明ありがとうございます。下記のような構成に変更することでエラーを解決することが出来ました。
set_attach_event(); を const init = function () {} ないで出力することでカメラ画像をファイルアップロード時に非表示にするコードと名前とメッセージの入力可能な字数をカウントするコード両方に window.addEventListener("DOMContentLoaded", init); イベントを適応することができました。
set_attach_event = function () {
・・・
}
const init = function () {
set_attach_event();
}
window.addEventListener("DOMContentLoaded", init);
No.1
- 回答日時:
こんばんは
ご提示の内容が全文なのか一部抜き出しなのか不明ですが、ご質問文に記載されていないものは無視してよいものとして・・
(HTMLの構成も不明ですが、そちらにも問題は無いものと仮定します)
なさりたいこともよくわからないし、実際の実行内容もよくわかりませんけれど、後半の「変えた」というる部分で、エラーが発生していると推測します。
ブラウザの開発者ツールなどで見て、エラーが出ていませんか?
ご提示のスクリプトの範囲内で見る限り、
set_attach_event
input_button_click
という関数が呼ばれているのにも関わらず、定義がありませんのでエラーが発生しているのではないかと考えられます。
「〇〇 is not defined」のエラーが出ているのではないかと。
なお、ご質問には関係ありませんけれど、スクリプトの構成がわかりにくく作られているので、ミスの入り込む余地が生まれやすいのではと想像します。
全体を整理することで、もっとスッキリすると思いますし、間違えも発生しにくくなるだろうと推測します。
Q.ブラウザの開発者ツールなどで見て、エラーが出ていませんか?
A.回答ありがとうございます、エラーを確認したところ下記のように表示されております。
ソースコードを確認したところ init という変数は無いとのことですが const init = function () {} で定義しているため原因が不明です。
閉じタグの位置がおかしいのでしょうか…?
//DOM構築、スタイルシート、画像、サブフレームの読み込みが完了した後に発生する
window.addEventListener("DOMContentLoaded", init);
※エラー文
Uncaught ReferenceError: init is not defined
※サンプルサイト
https://www.irasuto.cfbx.jp/%e8%b3%aa%e5%95%8f%e …
Q.定義がありませんのでエラーが発生しているのではないかと考えられます。
A.回答ありがとうございます、カメラ画像をファイルアップロード時に非表示にするコードと名前とメッセージの入力可能な字数をカウントするコードを HTMLElement.innerHTML を使い書いた場合に
DOM要素が発生してしまうリスクがある為 window.addEventListener("DOMContentLoaded", init); でまとめる方法で考えております。
カメラ画像を非表示にするコードも機能していない為そちらに原因があるとは思うのですが、解決方法が分からず困っております。
アドバイスお願い致します。
※該当コード(bbs_quest_input.php)
https://wandbox.org/permlink/uNt2X9bLZw8EYwWQ
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript JavascriptでDom XSSの脆弱性対策を行いたい 2 2023/09/24 21:20
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript javascriptで移動ボタンを押した際に遷移するボタンを追記したい 1 2022/11/29 03:02
- JavaScript プログラムがうまく動きませんレビューお願いします 1 2022/07/10 05:08
- JavaScript JavaScriptで作ったアプリが正常に動作しない。改善したい。 3 2024/01/06 16:33
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
Javascriptエラーの原因が分からない
JavaScript
-
二次元配列の中の各行の要素をランダムに並べ替えたいです。
JavaScript
-
IT業界より楽に稼げる業界ってあるんですか?銀行とか?
その他(プログラミング・Web制作)
-
-
4
[初心者]javascriptのfor文でなぜか繰り返し処理をしない。理由がわかりません。
JavaScript
-
5
質問です。 配列が100以上の場合は、100単位で繰り返し処理を実行したいのですが、どのように処理を
Java
-
6
プログラミング言語の制作方法について
C言語・C++・C#
-
7
Cookieに保存されない
JavaScript
-
8
CSV出力を画面から選択したデータ項目のみを出力させたいです。
Java
-
9
JavaScriptで作ったアプリが正常に動作しない。改善したい。
JavaScript
-
10
HTMLで作った時報アプリが動きません
JavaScript
-
11
Webアプリや業務アプリのデータ登録処理について質問です。基本的な流れは ユーザー入力 バリデーショ
その他(プログラミング・Web制作)
-
12
プログラムの素朴な質問です 分岐するコードを書く時に、 /** * 関数 */ sub(){ ...
その他(プログラミング・Web制作)
-
13
ボタンを押したあとに画像を表示させる方法についてアドバイスお願い致します
JavaScript
-
14
HTMLタグに複数のクラスを設定する方法がわからない
JavaScript
-
15
変数名をどのようにつけるのが良いかアドバイスお願い致します
JavaScript
-
16
javaのDBアクセス(基幹系レベル)の情報が欲しいです。
Java
-
17
htmlの修正方法を教えていただきたいです。
HTML・CSS
-
18
アクセス解析。「直前に見ていたサイト、ページ」の測定方法について詳しい方お願いします。
SEO
-
19
ボタンが押されたらWebページの文字コードを 変える、というプログラミングを書きたいです。 目的は文
HTML・CSS
-
20
大至急。webのシングルページを作ろうと考え、イラレでデザインをしました。 それからの手順で悩んでる
HTML・CSS
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
onClick="this.form.submit
-
フォーム内で記入したクエリ送...
-
インラインフレームにボタンク...
-
onclickで2個指定するには?
-
submitするとなぜか2度実行する
-
shiftキーを押しながらコマンド...
-
2度押し防止ボタン
-
複数のsubmitによって送信する...
-
VBSでブラウザ上のテキストボッ...
-
confirmのOK・キャンセルを押し...
-
return trueとreturn falseの用...
-
テキストボックス入力を半角英...
-
<JavaScript>tableタグを入力不...
-
onchangeイベントを強制的に発...
-
追加ボタンを押した際に ok ボ...
-
正規表現で複数マッチ条件で悩...
-
テキストエリアをenterキーでフ...
-
HTMLとJavaScriptで作った表示...
-
Jvasvriptのlengthで個数が取得...
-
全てのselect要素をデフォルト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ボタン2回押しを無効にしたい
-
VBSでブラウザ上のテキストボッ...
-
submitするとなぜか2度実行する
-
フォーム内で記入したクエリ送...
-
ボタンを押すとチェックボック...
-
disabled プロパティが表示され...
-
confirmのOK・キャンセルを押し...
-
onClick="this.form.submit
-
onclickで2個指定するには?
-
onclickをEnterキーでも行いたい
-
confirm()で表示したダイアログ...
-
印刷プレビュー後のウィンドウ...
-
送信フォームで送信ボタンをお...
-
HTAで、こんなボタンが作りたい。
-
確認ダイアログの出し方(JavaS...
-
shiftキーを押しながらコマンド...
-
jsで質問です。 ボタンが二つ存...
-
formで複数のボタンからひとつ...
-
メッセージボックスで「はい」...
-
JavaScriptにおいてPOSTで送信...
おすすめ情報