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

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

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

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

Q&A

解決済

4回答

2293閲覧

JavaScript コードが読み解けない・・・

a-_.

総合スコア133

JavaScript

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

0グッド

0クリップ

投稿2016/08/30 05:17

編集2016/09/06 02:35

下記コードを解読しようと試みてるんですが、特にif (up.checked == true || de.checked == true)の箇所
が理解できません
ブラウザ表示してラジオボタンのps・up・deを選択し、psとupだったら条件以外の場合ERROR1~4を表示、upとdeを選択中chkid[](チェックボックス)をチェックしなかったらERROR5を表示という動作を追加したいんです
今のコードだと一応動作は出来るけど、チェックボックスにチェックをいれてもERROR5が表示されてしまうため今ここで何が処理されてるのか確認したいんです
if (up.checked == true || de.checked == true)の条件文の中で行っている処理で、chkid[]が未チェックだとアラート表示になると思ったらチェックを入れた状態でもアラート表示になってしまうのはなぜでしょうか
console.logでどのような処理をしているのかも、()内のオブジェクトを表示するという事しか調べられませんでした
解説していただけませんか

JavaScript

1 function condition() { 2 var ps = document.getElementById("r1"); 3 var up = document.getElementById("r2"); 4 var de = document.getElementById("r3"); 5 if (ps.checked == true || up.checked == true) { 6 if (document.getElementById('name').value.length >= 10) { 7 window.alert("ERROR1"); 8 return false; 9 } else if (document.getElementById('name').value.length == "") { 10 window.alert("ERROR2"); 11 return false; 12 } else if (document.getElementById('comment').value.length >= 300) { 13 window.alert("ERROR3"); 14 return false; 15 } else if (document.getElementById('comment').value.length == "") { 16 window.alert("ERROR4"); 17 return false; 18 } 19 } 20 if (up.checked == true || de.checked == true) { 21 cde = document.getElementsByName('chkid[]'); 22 var v = 0; 23 for(var bde = 0; bde < cde.length; bde++) { 24 console.log(cde[bde]); 25 console.log(bde); 26 cde[bde].disabled = false; 27 } 28 if (v == 0) { 29 window.alert ("ERROR5"); 30 } 31 } 32 }

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

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

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

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

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

kei344

2016/08/30 05:40

以前「value.length == ""」の部分について、指摘を受けておられたようなのですが、過去の回答を確認されてみてはいかがでしょうか。
a-_.

2016/08/30 05:43

ご回答ありがとうございます 「value.length == ""」の箇所はご回答後に訂正してあるので
a-_.

2016/08/30 06:00

当時のコードでは「=0」と書いて何も無い場合はと表現したかったのですが、「==""」で初めて空欄 or 0と処理されるとご指摘いただいたので訂正したまでですが。私が今回お聞きしたいのは貼ったコードがそれぞれどのような処理が行うのかということです
kei344

2016/08/30 06:04

あなたの貼り付けたコードを見て、「value == ""」になっている箇所を探してみてください。それを指摘しただけです。
a-_.

2016/08/30 06:07

すいません、全体的に何をおっしゃっているのか分かりません 「==""」はERROR2・4の箇所ですが
kei344

2016/08/30 06:14

「.value.length == ""」となっているところは「.value == ""」すべきと指摘を受けているのに直していない。と言っています。
a-_.

2016/08/30 06:17

何故lengthを省くんでしょうか
kei344

2016/08/30 06:20

0にしたければ、「.value.length == ""」となっているところは「.value.length == 0」。
a-_.

2016/08/30 06:24

「value.length == ""」だと何故空欄・0と処理されないんでしょうか
takito

2016/08/30 06:37

質問の書き方が、本来聞きたいことと噛み合ってないようですよ。 「if (up.checked == true || de.checked == true)の条件文の中で行っている処理の~~が~~になると思ったら~~になってしまうのはなぜでしょうか?」と直してみてはいかがでしょう?
guest

回答4

0

基本的には比較演算子等を調べる事で解決します。

#比較演算子・理論演算子

条件分岐をする際に使われる演算子で与えられたデータを評価します。
if文で条件を分岐する際には比較演算子と理論演算子の2つを使います。

具体的な例と説明は次のURL先で説明されています。

比較演算子 - JavaScript | MDN
理論演算子 - JavaScript | MDN

質問者さんは「ps.checked == true || up.checked == true」は何かと言う事を知りたいと思うのでまず詳しい説明はなしでお答えすると、

==は比較演算子の等価演算子になります。
等価演算子では左右にある値が同じであるかを評価します。
同じである場合はtrue違う場合falseになります。

||理論演算子は日本語で言う「または」に値します。

式1 || 式2

とされている場合、式1がtrueであればifはtrueの結果になります。
式1がfalseであった場合式2が評価されます。

#演算子を上手く使えば様々な条件を設ける事が出来る

最初にも説明した様に||の様に他にも沢山の演算子があります。
それらの一部を少しだけ紹介させて頂きます。

■ &&

&&は記号の通り、2個目に条件を定義出来ます。
日本語で言うと「◯◯が◯◯であって、◯◯が◯◯の時」と言う様な式の場合

if(◯◯ == true && ◯◯ == true)

この様に使う事で一度に複数条件を設ける事が出来ます。

■ !

この記号を式に付ける事で、式を否定する事が出来ます。

var str = "Hello"; if(str){ //JavaScriptではこの式の場合値がある無いかで判断される //true } if(!str){ //trueになるのを否定する為falseとなる。 //false }

条件を否定する事で消去法が使える様になる。

投稿2016/08/30 06:12

fukumi822

総合スコア228

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

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

a-_.

2016/08/30 06:34

ご回答ありがとうございます ご回答いただいた後で申し訳ないんですが、文中の各演算子は意味やどういう処理がされるかという事はある程度理解できてます 貼った各コードがどう処理を行おうとしてるのか、という解説をしていただきたかったのです
fukumi822

2016/08/30 11:51

そもそもですが、この様なソースはしっかり段階を踏む事で分かる様なソースコードです。 突き放した様な言い方にはなりますが、質問者さんはちゃんと勉強されるべきです。 ちゃんと学ばなかったから分からないのは当たり前で、学べば出来る様な事ですので本来質問するレベルの物かと自分は思いました。 あとですね、質問者さんは具体的にどうして貰いたいんですか? プログラム全体のやりたい事をお教えすればいいのか、1行1行挙動を書いて貰いたいのか.
guest

0

論理演算子

up.checked == true と de.checked == true 2つの条件式のうち、1つでも満たす場合は TRUE となる

イメージ説明

投稿2016/08/30 05:33

編集2016/08/30 06:31
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

a-_.

2016/08/30 05:36

ご回答ありがとうございます 全体の解説していただけると助かります
退会済みユーザー

退会済みユーザー

2016/08/30 05:38

> 全体の解説していただけると助かります 全体とは?
a-_.

2016/08/30 05:41

if (up.checked == true || de.checked == true)の箇所をもう少し詳しく
退会済みユーザー

退会済みユーザー

2016/08/30 05:43

もうしわけないが、これ以上詳しい解説なんてしようがないですよ。 一体、何がわからないのかがわかりません。
退会済みユーザー

退会済みユーザー

2016/08/30 05:44

if (up がチェッックされている または de がチェックされている)
a-_.

2016/08/30 05:55

すいません こちらも書くべきでしたね if文でupとdeが選択されたらtrue cdeはname属性のchkid[]を複数取得している 変数vは0 for文条件式で(変数bdeは0; 変数bdeはcdeの数だけ; 変数bdeは1つずつ追加する;) if文で変数vが0と等しいときアラート表示 ここまでは解読できるんですが、問題はfor文中のコードが何を処理しようとしているのかが解読できないです
退会済みユーザー

退会済みユーザー

2016/08/30 05:57

if文でupとdeが選択されたらtrue <- 「と」じゃなくて「いずれか」
退会済みユーザー

退会済みユーザー

2016/08/30 05:59

cde[bde].disabled = false; ↑ 無効をfalseにする = 有効にする
a-_.

2016/08/30 06:04

console.logの箇所と>cde[bde]の解説もお願いできますか
退会済みユーザー

退会済みユーザー

2016/08/30 06:08 編集

えっ、そこから??? bde番目のcde console.log なんてただの値の確認でしょう。 さすがに、このレベルの質問を繰り返すのは如何なものか… JavaScript の基礎を扱った書籍でも購入して勉強してください。
a-_.

2016/08/30 06:14

ブラウザ表示してラジオボタンのps・up・deを選択し、psとupだったら条件以外の場合ERROR1~4を表示、upとdeを選択中chkid[](チェックボックス)をチェックしなかったらERROR5を表示という動作を追加したいんです 今のコードだと一応動作は出来るけど、チェックボックスにチェックをいれてもERROR5が表示されてしまうため今ここで何が処理されてるのか確認したいんです
退会済みユーザー

退会済みユーザー

2016/08/30 06:21

なぜ、本当に聞きたいことを後で出すんですか? めんどくさくて付き合いきれません。 > 表示されてしまうため今ここで何が処理されてるのか確認したいんです さすがにこのコード見るだけでは「意図」まではわかりません。 書いた人に聞いてください。 > upとdeを選択中chkid[](チェックボックス)をチェックしなかったらERROR5を表示という動作を追加したいんです その条件式を書けばいい。あなたがこれをプログラムで表現し、あなたなりに書いて試したことでうまくいかない場合は、それを質問してください。
jm1156

2016/08/30 06:22

var v = 0; ってやってるんだから if (v == 0) { window.alert ("ERROR5"); } でエラーがでるのは当然かと…。
a-_.

2016/08/30 06:27

聞きたい事聞いたけどレベルがどうのと話が噛み合ってないので、根本的な事書くしか話続かないじゃないですか その条件式を書いてうまくいかなかったため質問しました
jm1156

2016/08/30 06:44

レベルのせいで噛みあってないと思いますが…。 根本的な事を書くって、根本的にわかってない気がするのですが…。
退会済みユーザー

退会済みユーザー

2016/08/30 06:47

> a-_. さん 聞かれてもいないことの、裏の裏まで読んで回答なんてできません。超能力者じゃないんですから。
a-_.

2016/08/30 07:16

こちらも最初から裏を読まないと回答できない事は聞いてないので 聞きたい事しか書いていないのに、そのレベルがどうのこうのなんて言われたら、プログラミングを始めたばかりの他の方の質問するという行為の意味(或いは資格)もなくなると思われます
退会済みユーザー

退会済みユーザー

2016/08/30 07:24 編集

望む回答がつかないのは、聞きかたの問題ですよ。言い換えるなら、「国語」の問題です。
NatsumiOki

2016/08/30 07:29

横からすみませんが・・・ 今回は途中で質問の編集もされていますし、回答者さんはその内容についてあらためて回答するか、でなければスルーしておいてほしいです。 私も過去の質問でこれ以上コメントでやりとりはできないというものはスルーしています。 コメントで煽りあっているとほかの回答が埋もれてしまうし誰の参考にもなりませんし、見ていて気持ちのいいものではありません。 質問者さんのこれまでの質問のやりとりはたしかに話が噛み合っていなかったりすることも多いです。国語の問題といえばまあそれまでなのですが、本題と逸れた別の質問を始めてしまうのが大きな原因だと思いますので、いったん締めて、新しく質問し直された方が良いと思います。
退会済みユーザー

退会済みユーザー

2016/08/30 07:32

> NatsumiOki さん もしわけありません。 以降、スルーするよういたします。
guest

0

https://teratail.com/questions/45965で以下のように回答しましたが、

javascriptで「ERROR5」が表示されないのは、以下が誤っているからだと思います。
checkboxのループ処理は「chkchange」関数と同じに書き方にしてはどうでしょうか。

同じにするのはループの書き方で、ループ内の処理をコピーしてはいけません。
chkchange関数は、チェックボックスの有効化、無効化を行う関数ですよね?
そのままコピーしても、チェックボックスの有効/無効を設定する処理にしかなりません。

https://teratail.com/questions/45965」のソースを見直して、
ループの中でなにをするべきか、考えてみた方がよいと思います。

投稿2016/08/30 07:56

attercop

総合スコア246

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

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

a-_.

2016/08/30 08:10 編集

ご回答ありがとうございます ご指摘を受け、コピペしたコードのままだと本来実現したい事とは異なる動作になってしまうというのは把握してます 私自身でも内容を理解しようとしたけれど、完全には出来なかったためconsole.log等の解説を今回のページでさせていただきました
guest

0

ベストアンサー

質問の書き直しを提案した手前、変更後の質問について回答します


chkid[]が未チェックだとアラート表示になると思ったらチェックを入れた状態でもアラート表示になってしまうのはなぜでしょうか

問題部分を抜き出します

javascript

1var v = 0; 2for(var bde = 0; bde < cde.length; bde++) { 3 console.log(cde[bde]); 4 console.log(bde); 5 cde[bde].disabled = false; 6} 7if (v == 0) { 8 window.alert ("ERROR5"); 9}

v = 0 としてから後の処理で v の値に変化がありませんので、if (v == 0) {は常に成立して続くwindow.alert ("ERROR5");を実行します

やりたいことはchkid[](チェックボックス)をチェックしなかったらERROR5を表示なのに、その処理がありません

たとえばfor文の中に

javascript

1if ( cde[bde]にチェックがついていたら ){ 2 v に 1 を入れる 3}

というのを追加したらよいのではないでしょうか


console.logでどのような処理をしているのかも、()内のオブジェクトを表示するという事しか調べられませんでした

console.log は、ブラウザの開発ツール(F12を押すと出てきます)で「コンソール」というフィールドに()に指定したオブジェクトの内容を出力してくれます

javascript

1console.log(cde[bde]); /*配列 cde の 変数 bde 値番目に入っている値を出力 */ 2console.log(bde); /*変数 bde の値を出力 */

つまり、bdeの値の変化と、それによって指し示している配列cdeの値をコンソールに出力して確認できるようにしている

console.logを使うと、それを書いたタイミングにオブジェクトにはどのような値が入っているかを確認することができます
プログラムの中で見えない値を可視化することで、問題があったときの解決の糸口となりとても有用です

投稿2016/08/30 07:42

takito

総合スコア3111

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

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

a-_.

2016/08/30 08:24

ご回答ありがとうございます コンソールについてなんですが、console.logで出力しようと思いコーディングして開発ツールで見ようと思っても何も表示されない現象が発生してるんです なので確認のしようがない状況なんです そのため >cde[bde]にチェックがついていたら ){ v に 1 を入れる のcde[bde]が何をどうしようとしているのかが分からないのです
takito

2016/08/30 08:57

それでは 「console.logでコンソールに出力しようとしても何も表示されない現象が発生しています」 という質問を作り、動作環境のOS、ブラウザ種類とバージョンの情報を記載されるのがよいでしょう ここの質問タイトルは「Javascriptが読み解けない」となっているので、誰かが「console.logでコンソールに出力しようとしても何も表示されない」現象に陥った時、その解決方法にたどり着けないためです console.log出力の根本解決ではないですが、値を確認したいのなら alert(cde[bde]); alert(bde); に置き換えてはいかがでしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問