jackytom
@jackytom

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

javascriptでdisabledのコントロールができない

Q&A

Closed

PHPでメールアドレスがテーブル(mariaDB)に登録済のものでないかのチェックをして、その結果によって、ボタンのdisabledをfalseかtrueかにしたくてソースを書いています。
しかしながら、どの条件に合致してもtrueのままです。

条件に合致した際に、メッセージをremoveするようにもしているのですが、そちらはできています。
試しにconsole.log(12行目)もやってみましたが、そちらも正しく表示されます。
disabledのコントロールだけが効かず、原因不明です。
関係あるか微妙ですが、php(html)側のbuttonのtypeはsubmitです。

原因究明にご協力いただければ幸いです。
ソースを添付いたします。

<script>
		document.addEventListener('DOMContentLoaded', function() {
			document.querySelector('#button_chk').addEventListener('click', function(){
				
				let button = document.getElementById('button_con');
				let result = document.getElementById('check_result').value;
				let mailChkMsg = document.getElementById('mail_chk_msg');
				let dbMailAddress = JSON.parse('<?php echo $phpMailAddress;?>');
				let entMailAddress = document.getElementById('address').value;

				if(result === 'チェック完了しました。' && mailChkMsg === null){
					console.log(result);
					button.disabled = false;
					} else {}

				if(result === 'チェック完了しました。' && mailChkMsg !== null){
					document.getElementById('mail_chk_msg').remove();
					button.disabled = false;
					} else {}

				if(result !== 'チェック完了しました。' && result !== '' && mailChkMsg === null){
					document.getElementById('mail_chk_msg').remove();
					button.disabled = true;
					} else {}

				if(result !== 'チェック完了しました。' && result !== '' && mailChkMsg ==! null){
					document.getElementById('mail_chk_msg').remove();
					button.disabled = true;
					} else {}

				},false)
		},false)
</script>
<noscript>
	JavaScriptが利用できません
</noscript>
0

3Answer

if(result === 'チェック完了しました。' && mailChkMsg === null){
	console.log(result);
	button.disabled = false;
	} else {}

if(result === 'チェック完了しました。' && mailChkMsg !== null){
	document.getElementById('mail_chk_msg').remove();
	button.disabled = false;
	} else {}

if(result !== 'チェック完了しました。' && result !== '' && mailChkMsg === null){
	document.getElementById('mail_chk_msg').remove();
	button.disabled = true;
	} else {}

if(result !== 'チェック完了しました。' && result !== '' && mailChkMsg ==! null){
	document.getElementById('mail_chk_msg').remove();
	button.disabled = true;
	} else {}

上記部分、こんな複雑に条件分けせず

document.getElementById('mail_chk_msg')?.remove();
button.disabled = result !== 'チェック完了しました。';

こうすればいいのでは?

2Like

試しにconsole.log(12行目)もやってみましたが、そちらも正しく表示されます

ということであれば、
その後、23行目もしくは28行目のbutton.disabled = trueを通っていると考えられます。こちらの処理にもconsole.logを追加して確認されてはどうでしょうか?

1Like

Comments

  1. @jackytom

    Questioner

    連絡遅くなり、申し訳ありません。
    回答ありがとうございます。
    再度確認してみましたが、console.log(12行目)も正しく表示されてなく、button.disabledもtrueでした。
    原因は、「チェック完了しました。」と表示させる処理をPHPのボタンで処理していて、かつ添付のjavascriptも同じボタンで処理させているため、javascriptで「チェック完了しました。」が取得できなかったようです。
    この方法ではそもそも無理があるので、別の方法で対応しました。
    本件、クローズさせていただきます。

mailChkMsg.remove(); で代用可能です。

let mailChkMsg = document.getElementById('mail_chk_msg');
           document.getElementById('mail_chk_msg').remove();
mailChkMsg.remove();

mailChkMsg === null 型の比較
mailChkMsg !== null 型と値の比較
mailChkMsg ==! null 文法エラーにならない?

if(true判定 && mailChkMsg == null)
mailChkMsg.remove(); 

mailChkMsgの型がnullの型に一致でなく、mailChkMsgの値がnullの値に一致した場合、mailChkMsg.remove();はエラーになります。

2行目、disabledがCSSに含まれるなら

document.addEventListener('load', function() {

としては?

0Like

Your answer might help someone💌