\r\n
\r\n
\r\n
\r\n {% csrf_token %}\r\n {{ form | crispy }}\r\n
投票箱の数\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
{{ form.formset | crispy}}
\r\n
{{ formset.management_form }}
\r\n
\r\n
\r\n
\r\n
\r\n
{{ form.formset | crispy}}
\r\n
{{ formset.management_form }}
\r\n
\r\n
\r\n
\r\n
\r\n
{{ form.formset | crispy}}
\r\n
{{ formset.management_form }}
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n```\r\n\r\n### 試したこと\r\n`table`の場所を`classの名前`に変更して書いたのですが、`box2`と`box3`が非表示にならず、最初から全て表示されてしまいます。\r\n2,どうすればクラスの表示・非表示が出来ますか?\r\n参考サイトなども教えていただければ幸いです。よろしくお願いいたします。\r\n\r\n### 追記\r\nbase.htmlと連動して表示をした場合、boxの表示・非表示が実行できませんでした。\r\nbase.htmlと連動して変更した箇所は、`body直下`を`class=\"container\"`で囲ってる所だと思います。\r\n\r\nbase.html連動なし\r\n![base.html連動なし](28f5829ceac5732e902bc449819b87fb.png)\r\n\r\nbase.html連動\r\n![base.html連動](acfb1004d3c5ba02e9fde08f79ce9a57.png)\r\n\r\nbase.htmlの`jQuery`などのバージョンも確認したのですが、おかしな箇所は見つけられませんでした。\r\n```html\r\n{% load static %}\r\n\r\n\r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n 会員登録サンプル\r\n\r\n\r\n \r\n
\r\n {% block content %}{% endblock %}\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n```\r\n他に必要なコードがあれば追記させていただきますのでよろしくお願いいたします。","answerCount":3,"upvoteCount":0,"datePublished":"2020-04-10T02:18:48.071Z","dateModified":"2020-04-10T09:39:29.625Z","acceptedAnswer":{"@type":"Answer","text":"`[].forEach.call(document.querySelectorAll(\"v2,.v3\"),x=>{`\r\nご提示のコードの中に `v2.v3` に該当する要素はありません。 `.box2,.box3` ならあります。\r\n\r\n`x.style.display=flg?\"box-row\":\"none\";`\r\n`display` に設定できる値に `box-row` というキーワードはありません。 `table-row` ならありますが、 `table-row` はその名の通り、tableの行であることを示していますので、たんに表示・非表示を切り替えたいだけならblankにするのがよいでしょう。\r\n\r\nそもそも非表示にするならbox2, box3などを持つdivではなく、その上の.col-sm-4から消したほうがいいと思いますが……(好みの問題かもしれません)\r\nあと、慣れないうちから短すぎる変数名を使うのはやめましょう。\r\n```js\r\nwindow.addEventListener('DOMContentLoaded', () => {\r\n document.querySelector('#s1').addEventListener('change', evt => {\r\n const val = evt.target.value;\r\n\r\n // 表示・非表示を切り替える対象は .col-sm-4 のdiv (= .box直下のdiv)\r\n document.querySelectorAll('.box > div').forEach(box => {\r\n\r\n // 判別に使うdivはすべてbox3を持っているので、クエリは.box3だけでよい\r\n const isShown = box.querySelector('.box3').classList.contains(val);\r\n\r\n // '' を指定するとnoneが外れる\r\n box.style.display = isShown? '' : 'none';\r\n });\r\n });\r\n document.querySelector('#s1').trigger('change');\r\n});\r\n```","dateModified":"2020-04-10T03:09:12.460Z","datePublished":"2020-04-10T03:09:12.460Z","upvoteCount":2,"url":"https://teratail.com/questions/252622#reply-364713"},"suggestedAnswer":[{"@type":"Answer","text":"直接の回答でなくて申し訳ありませんが、、、\r\n参考にしたソースコードを改変されたようですが矛盾だらけであなたに流用できるスキルがないと思います。(そして流用元のコードがあなたのやりたいことに対して高度すぎて参考にするべきでないです(隠すという着想自体は参考にしても大丈夫です))\r\n\r\n一度jQueryの基本の勉強をされることをお勧めします。\r\n\r\n[jQueryチュートリアル](http://oss.infoscience.co.jp/jquery/)\r\n[隠す方法](https://qiita.com/sunnyG/items/faf1821ae09820e30ce8)\r\n[jQuery日本語リファレンス](http://semooh.jp/jquery/)","dateModified":"2020-04-10T02:46:36.876Z","datePublished":"2020-04-10T02:46:36.876Z","upvoteCount":1,"url":"https://teratail.com/questions/252622#reply-364704","comment":[{"@type":"Comment","text":"勉強しながら書いていきたいと思います!ご提案ありがとうございます!","datePublished":"2020-04-10T09:42:04.776Z","dateModified":"2020-04-10T09:42:04.776Z"}]},{"@type":"Answer","text":"selectのoptionであればcssで制御よりJavaScriptで要素自体をadd,removeしたほうがブラウザ依存なく実現できると思います。 \r\n「表示非表示」ではなく、「そもそもそこに存在させない」です。","dateModified":"2020-04-10T02:42:56.186Z","datePublished":"2020-04-10T02:42:56.186Z","upvoteCount":2,"url":"https://teratail.com/questions/252622#reply-364701","comment":[{"@type":"Comment","text":"回答ありがとうございます!","datePublished":"2020-04-10T09:43:06.311Z","dateModified":"2020-04-10T09:43:06.311Z"},{"@type":"Comment","text":"えーと、それだけ?\r\n試した結果、経過をフィードバックしてください。","datePublished":"2020-04-10T09:53:14.925Z","dateModified":"2020-04-10T09:53:14.925Z"}]}],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https://teratail.com","name":"トップ"}},{"@type":"ListItem","position":2,"item":{"@id":"https://teratail.com/tags/Django","name":"Djangoに関する質問"}},{"@type":"ListItem","position":3,"item":{"@id":"https://teratail.com/questions/252622","name":"jQueryでクラスの表示・非表示を行いたいです。"}}]}}}
質問するログイン新規登録

Q&A

解決済

3回答

1440閲覧

jQueryでクラスの表示・非表示を行いたいです。

Mario_11

総合スコア95

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

0グッド

0クリップ

投稿2020/04/10 02:18

編集2020/04/10 09:39

0

0

前提・実現したいこと

jQueryでクラスの表示・非表示を行いたいです。
本来ならば、入力フォーム欄を増やす処理を作ろうとしてましたが、「隠した方が処理が楽」という回答を見て表示・非表示に変えました。
こちらの質問を参考に表示・非表示させようと思ったのですが現在、Djangoを使ってフォームを作成しているのですが、参考サイトの質問と違いtableを使用していませんので、要所要所を変更ながら書いたのですが上手くいかず質問させていただきました。

1、jQueryはtable以外でclassを使った場合でも表示・非表示は可能ですか?

該当のソースコード

html

1<script src="http://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 2 <form method="POST"> 3 <div class="row"> 4 <div class="col-sm-12"> 5 {% csrf_token %} 6 {{ form | crispy }} 7 <dt>投票箱の数<input type="button" value="Get "> 8 <select id="s1"> 9 <option value="box1">1</option> 10 <option value="box2">2</option> 11 <option value="box3">3</option> 12 </select> 13 </dt> 14 </div> 15 <div class="box"> 16 <div class="col-sm-4"> 17 <div class="box1 box2 box3"> 18 <h5>{{ form.formset | crispy}}</h5> 19 <h5>{{ formset.management_form }}</h5> 20 </div> 21 </div> 22 <div class="col-sm-4"> 23 <div class="box2 box3"> 24 <h5>{{ form.formset | crispy}}</h5> 25 <h5>{{ formset.management_form }}</h5> 26 </div> 27 </div> 28 <div class="col-sm-4"> 29 <div class="box3"> 30 <h5>{{ form.formset | crispy}}</h5> 31 <h5>{{ formset.management_form }}</h5> 32 </div> 33 </div> 34 </div> 35 </div> 36 <button type="submit">Submit</button> 37 </form> 38<script> 39HTMLElement.prototype.trigger=function(eventStr){ 40 var e = document.createEvent("HTMLEvents"); 41 e.initEvent(eventStr, true, true ); 42 return this.dispatchEvent(e); 43}; 44 45window.addEventListener('DOMContentLoaded', ()=>{ 46 document.querySelector("#s1").addEventListener('change',e=>{ 47 var v=e.target.value; 48 [].forEach.call(document.querySelectorAll("v2,.v3"),x=>{ 49 var flg=x.classList.contains(v); 50 x.style.display=flg?"box-row":"none"; 51 [].forEach.call(x.querySelectorAll('input'),y=>{ 52 y.disabled=!flg; 53 }); 54 }); 55 }); 56 document.querySelector("#s1").trigger('change'); 57}); 58</script>

試したこと

tableの場所をclassの名前に変更して書いたのですが、box2box3が非表示にならず、最初から全て表示されてしまいます。
2,どうすればクラスの表示・非表示が出来ますか?
参考サイトなども教えていただければ幸いです。よろしくお願いいたします。

追記

base.htmlと連動して表示をした場合、boxの表示・非表示が実行できませんでした。
base.htmlと連動して変更した箇所は、body直下class="container"で囲ってる所だと思います。

base.html連動なし
base.html連動なし

base.html連動
base.html連動

base.htmlのjQueryなどのバージョンも確認したのですが、おかしな箇所は見つけられませんでした。

html

1{% load static %} 2<!DOCTYPE html> 3<html lang="ja"> 4<head> 5 <!-- Required meta tags --> 6 <meta charset="utf-8"> 7 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 8 9 <!-- Bootstrap CSS --> 10 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" 11 integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous"> 12 13 <title>会員登録サンプル</title> 14</head> 15<body> 16 <!-- メインコンテント --> 17 <div class="container"> 18 {% block content %}{% endblock %} 19 </div> 20 21 <!-- jQuery first, then Popper.js, then Bootstrap JS --> 22 <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" 23 integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" 24 crossorigin="anonymous"></script> 25 <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" 26 integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" 27 crossorigin="anonymous"></script> 28 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js" 29 integrity="sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm" 30 crossorigin="anonymous"></script> 31 <script src="{% static 'app/js/plugins/responsive-paginate.js' %}"></script> 32 <script src="{% static 'app/js/app.js' %}"></script> 33 34</body> 35</html>

他に必要なコードがあれば追記させていただきますのでよろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

[].forEach.call(document.querySelectorAll("v2,.v3"),x=>{
ご提示のコードの中に v2.v3 に該当する要素はありません。 .box2,.box3 ならあります。

x.style.display=flg?"box-row":"none";
display に設定できる値に box-row というキーワードはありません。 table-row ならありますが、 table-row はその名の通り、tableの行であることを示していますので、たんに表示・非表示を切り替えたいだけならblankにするのがよいでしょう。

そもそも非表示にするならbox2, box3などを持つdivではなく、その上の.col-sm-4から消したほうがいいと思いますが……(好みの問題かもしれません)
あと、慣れないうちから短すぎる変数名を使うのはやめましょう。

js

1window.addEventListener('DOMContentLoaded', () => { 2 document.querySelector('#s1').addEventListener('change', evt => { 3 const val = evt.target.value; 4 5 // 表示・非表示を切り替える対象は .col-sm-4 のdiv (= .box直下のdiv) 6 document.querySelectorAll('.box > div').forEach(box => { 7 8 // 判別に使うdivはすべてbox3を持っているので、クエリは.box3だけでよい 9 const isShown = box.querySelector('.box3').classList.contains(val); 10 11 // '' を指定するとnoneが外れる 12 box.style.display = isShown? '' : 'none'; 13 }); 14 }); 15 document.querySelector('#s1').trigger('change'); 16});

投稿2020/04/10 03:09

thyda.eiqau

総合スコア2982

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

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

Mario_11

2020/04/10 09:41

回答ありがとうございます!単体のHTMLで実行した場合は成功したのですがdjangoのbase.htmlと連動して表示をした場合、表示・非表示が出来ませんでした。 質問内容に追記させていただきましたので、お手隙の際に知恵を貸して欲しいです。 よろしくお願いいたします。
guest

0

selectのoptionであればcssで制御よりJavaScriptで要素自体をadd,removeしたほうがブラウザ依存なく実現できると思います。
「表示非表示」ではなく、「そもそもそこに存在させない」です。

投稿2020/04/10 02:42

m.ts10806

総合スコア80890

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

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

Mario_11

2020/04/10 09:43

回答ありがとうございます!
m.ts10806

2020/04/10 09:53

えーと、それだけ? 試した結果、経過をフィードバックしてください。
guest

0

直接の回答でなくて申し訳ありませんが、、、
参考にしたソースコードを改変されたようですが矛盾だらけであなたに流用できるスキルがないと思います。(そして流用元のコードがあなたのやりたいことに対して高度すぎて参考にするべきでないです(隠すという着想自体は参考にしても大丈夫です))

一度jQueryの基本の勉強をされることをお勧めします。

jQueryチュートリアル
隠す方法
jQuery日本語リファレンス

投稿2020/04/10 02:46

akbr

総合スコア93

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

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

Mario_11

2020/04/10 09:42

勉強しながら書いていきたいと思います!ご提案ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問