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

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

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

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

ダイアログ

ユーザーにウィンドウやボックス等の形で個別で表示されるフォームであり、ユーザーに判断を促す目的で表示される。ユーザーが見逃す事のないよう、操作中のフォーム上にポップアップして表示される。

JavaScript

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

HTML

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

Q&A

解決済

1回答

2062閲覧

削除実行時の確認ダイアログを自作 削除実行時のコードが分からない

shunxile

総合スコア26

Django

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

ダイアログ

ユーザーにウィンドウやボックス等の形で個別で表示されるフォームであり、ユーザーに判断を促す目的で表示される。ユーザーが見逃す事のないよう、操作中のフォーム上にポップアップして表示される。

JavaScript

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

HTML

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

0グッド

0クリップ

投稿2021/06/10 05:43

編集2021/06/10 10:28

前提・実現したいこと

登録されたデータを削除する際に最初confirmメソッドを用いて実装していました。
confirmの場合確認時『OK』と『キャンセル』だったので
『はい』・『いいえ』に変更したいと思い調べたところ
関数を自作するしかないと分かり進めていきました。

・削除ボタンを押すと確認のダイアログが出現する
・『いいえ』を押すとダイアログが消える(ダイアログが消えているだけなので機能としては違うのかも)
・『はい』を押すと該当データが削除され一覧のページへ

という流れを考えています。

発生している問題・エラーメッセージ

削除ボタンを押す 確認のダイアログが出現 『いいえ』を押すとダイアログが非表示になる 『はい』を押すと二重submitでアクセス禁止となる

該当のソースコード

HTML

1<!-- CSSの設定 --> 2{% load static %} 3<link rel="stylesheet" type="text/css" href="{% static 'employee/reset.css' %}"> 4<link rel="stylesheet" type="text/css" href="{% static 'employee/style.css' %}"> 5<link rel="stylesheet" type="text/css" href="{% static 'employee/show.css' %}"> 6<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> 7<script type="text/javascript" src="https://code.jquery.com/ui/1.12.0/jquery-ui.min.js"></script> 8<link rel="stylesheet" href="http://code.jquery.com/ui/1.12.1/themes/pepper-grinder/jquery-ui.css"> 9 10<div class = top> 11 <h1>一覧</h1> 12 <!-- ページを遷移するボタンの表示 --> 13 <div class = move-btn> 14 <div><a href="/employee/" class = btn>メニュー</a></div> 15 </div> 16 17 <!-- 登録されているユーザー情報をテーブルで表示 --> 18 <div class = show-table> 19 <table border="1"> 20 <tr> 21 <th class="th1">ID</th> 22 <th class="th2">担当者名</th> 23 <th class="th3">性別</th> 24 <th class="th4">年齢</th> 25 <th class="th5">部署</th> 26 </tr> 27 <!-- 繰り返し処理でUserモデルに登録されているデータを全て表示する --> 28 {% for value in registrations %} 29 <tr> 30 <td class="td1">{{ value.id }}</td> 31 <td class="td2">{{ value.employee_name }}</td> 32 <!-- Userモデルに登録されたsexのカラムの値によって表示する文字を変える --> 33 <td class="td3">{% if value.sex == True %}男{% endif %} 34 {% if value.sex == False %}女{% endif %}</td> 35 <td class="td4">{{ value.age }}</td> 36 <!-- Userモデルに登録されたdepartmentのカラムの値によって表示する文字を変える --> 37 <td class="td5">{% if value.department == 1 %}管理{% endif %} 38 {% if value.department == 2 %}システム開発{% endif %} 39 {% if value.department == 3 %}営業{% endif %}</td> 40 <!-- 更新と削除のボタン表示 --> 41 <td class="edit"> 42 <button><a href="{% url 'employee:update' id=value.id %}"><img src="{% static "employee/update-btn.png" %}"></a></button> 43 <button id='del_btn' class='del_btn'><img src="{% static "employee/delete-btn.png" %}"></button> 44 <div id="dl2" style="display:none;"> 45 <p>この行を削除しますか?</p> 46 <footer> 47 <button id='cancel_button'>いいえ</button> 48 <form name="delete_form" id="delete_form" method="post" action="{% url 'employee:delete' id=value.id %}"></form> 49 {% csrf_token %} 50 <button id='delete_button' type="submit">はい</button> 51 </form> 52 </footer> 53 </div> 54 </td> 55 </td> 56 </tr> 57 {% endfor %} 58 </table> 59 60 <script type="text/javascript"> 61 62 $(function() { 63 $(".del_btn").click(function() { 64 $("#dl2").dialog({ 65 modal:true, 66 title:"登録者情報の削除確認", 67 buttons: { 68 "はい": function() {$(this).dialog("close");}, 69 "いいえ": function() {$(this).dialog("close");} 70 } 71 }); 72 }); 73 }); 74 </script> 75 </div> 76</div> 77

view

1# 削除へのリクエストに対する処理 2def delete(request, id): 3 employee = get_object_or_404(User, pk=id) 4 employee.delete() 5 return redirect('employee:show')

試したこと

<!-- 更新と削除のボタン表示 --> <td class="edit"> <button><a href="{% url 'employee:update' id=value.id %}"><img src="{% static "employee/update-btn.png" %}"></a></button> <form name="delete_form" id="delete_form" onsubmit="return confirm();" method="post" action="{% url 'employee:delete' id=value.id %}"></form> {% csrf_token %} <button id='del_btn' class='del_btn' type="submit"><img src="{% static "employee/delete-btn.png" %}"></button> </form> </td> </td> </tr> {% endfor %} </table> <div id="dl2" style="display:none;"> <p>この行を削除しますか?</p> </div> <script type="text/javascript"> /* function confirm() {} */ $(function confirm() { $(".del_btn").click(function() { $("#dl2").dialog({ modal:true, title:"登録者情報の削除確認", buttons: { "はい": function() { $(this).dialog("close"); }, "いいえ": function() { return false; $(this).dialog("close"); } } }); }); }); </script>

formタグにonsubmit属性を追加
ダイアログで『いいえ』を選択するとsubmitをキャンセルさせる

補足情報(FW/ツールのバージョンなど)

Windows10
Python3.9.4
Django 3.2.3
VitualStudioCode
他にも不足なとこあれば教えてください

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

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

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

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

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

guest

回答1

0

ベストアンサー

jQueryUIにdialogメソッドがありモーダル処理ができます

投稿2021/06/10 06:02

yambejp

総合スコア114843

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

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

shunxile

2021/06/10 07:24

>>yambejpさん 回答ありがとうございます。 導入したところダイアログを表示させ、ボタンを押して非表示にするとこまでは行ったのですが 『はい』を押したときに削除が実行されるように紐づけるにはどのようにすればいいのでしょうか?
yambejp

2021/06/10 07:30

「はい」ボタンに実行用の処理を書くだけです
yambejp

2021/06/10 07:31

buttons:{ "はい":function(){ ここに処理 }, "いいえ":function(){ $(this).dialog("close"); } },
shunxile

2021/06/10 09:56 編集

すみません。『はい』の処理コードが分からなかったので formにonsubmit属性を持たせ、『はい』の時はそのままダイアログを閉じる 『いいえ』の時はreturn falseでsubmitをキャンセルさせるようにしましたが、 『はい』も『いいえ』もダイアログが閉じるだけとなってしまい上手くいきませんでした。 この考え方より普通に『はい』の時の処理を記述した方がいいですか?
yambejp

2021/06/10 10:14

ちゃんと読んでないのですが、「はい」はサブミットする処理なのでしょうか? ざっくりこんな感じです <link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> <script> $(function(){ $('#del_dialog').hide(); $('#del').on('click',function(e){ e.preventDefault(); $('#del_dialog').dialog({ title:"削除", modal:true, buttons:{ "はい":function(){ $('#del').closest('form').submit(); }, "いいえ":function(){ $(this).dialog("close"); } }, open: function() { $( this ).siblings('.ui-dialog-buttonpane').find('button:eq(1)').focus(); }, }); }); }); </script> <form> <input type="text" name="num" value="123"> <input type="submit" id="del" value="del"> <div id="del_dialog">削除しますか?</div> </form>
shunxile

2021/06/10 10:27

そうですね。 削除ボタンを押すことでidをもって view.pyのdef deleteにいき削除するという風にしています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問