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

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

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

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

ダイアログ

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

JavaScript

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

jQuery

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

Q&A

解決済

1回答

2761閲覧

JavaScriptで確認ダイアログを追加したところ削除が機能しなくて困っています

shunxile

総合スコア26

Django

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

ダイアログ

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

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2021/06/24 06:05

編集2021/06/24 23:20

前提・実現したいこと

ユーザーの登録・一覧表示・編集・削除が行えるものを作成中です。
上記一通り機能としては作動していたのですが
削除時に確認のダイアログを出すことになり最初confirmを使っていたのですが
ダイアログ内の確認メッセージを『OK・キャンセル』ではなく『はい・いいえ』にするため
jQueryを用いてモーダル処理を使用しました。
削除ボタンを押す→『はい』を押すと登録データが削除される
という動きを考えています。
削除ボタンを押すとダイアログは出るのですが
ここで問題が2つあります。

どなたかよろしくお願いいたします。

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

①『いいえ』を押してもダイアログがすぐに消えず何回も押すと消える https://gyazo.com/d308285c9abddb1d45440f4d8eb4c551 ②『はい』を押しても変化がない https://gyazo.com/805be5523fda199617767e8de6aa60e3

該当のソースコード

view

1from django.urls import reverse 2from django.http import HttpResponse, HttpResponseRedirect 3from django.views.decorators.http import require_http_methods 4from django.shortcuts import render,get_object_or_404, redirect 5from django.template import loader 6from .form import EmployeeForm 7 8from .models import User 9 10# 一覧表示へのリクエストに対する処理 11def show(request): 12 # 登録されている担当者情報全てを取得する 13 registration_list = User.objects.all().order_by('id') 14 # 取得した情報をディクショナリに収める 15 registration_dict = {'registrations': registration_list} 16 # ディクショナリを渡して一覧表示画面で表示する 17 return render(request, 'employee/show.html',context=registration_dict) 18 19# 削除へのリクエストに対する処理 20def delete(request, id): 21 employee = get_object_or_404(User, pk=id) 22 employee.delete() 23 return redirect('employee:show')

urls

1from django.urls import path 2 3from . import views 4 5app_name = 'employee' 6urlpatterns = [ 7 path('', views.index, name='index'), 8 path('show/', views.show, name='show'), 9 path('update/<id>/', views.update, name='update'), 10 path('registration/', views.registration, name='registration'), 11 path('delete/<id>/', views.delete, name='delete'), 12]
<!-- CSSの設定 --> {% load static %} <link rel="stylesheet" type="text/css" href="{% static 'employee/reset.css' %}"> <link rel="stylesheet" type="text/css" href="{% static 'employee/style.css' %}"> <link rel="stylesheet" type="text/css" href="{% static 'employee/show.css' %}"> <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> <script type="text/javascript" src="https://code.jquery.com/ui/1.12.0/jquery-ui.min.js"></script> <link rel="stylesheet" href="http://code.jquery.com/ui/1.12.1/themes/pepper-grinder/jquery-ui.css"> <div class = top> <h1>一覧</h1> <!-- ページを遷移するボタンの表示 --> <div class = move-btn> <div><a href="/employee/" class = btn>メニュー</a></div> </div> <!-- 登録されているユーザー情報をテーブルで表示 --> <div class = show-table> <table border="1"> <tr> <th class="th1">ID</th> <th class="th2">担当者名</th> <th class="th3">性別</th> <th class="th4">年齢</th> <th class="th5">部署</th> </tr> <!-- 繰り返し処理でUserモデルに登録されているデータを全て表示する --> {% for value in registrations %} <tr> <td class="td1">{{ value.id }}</td> <td class="td2">{{ value.employee_name }}</td> <!-- Userモデルに登録されたsexのカラムの値によって表示する文字を変える --> <td class="td3">{% if value.sex == True %}男{% endif %} {% if value.sex == False %}女{% endif %}</td> <td class="td4">{{ value.age }}</td> <!-- Userモデルに登録されたdepartmentのカラムの値によって表示する文字を変える --> <td class="td5">{% if value.department == 1 %}管理{% endif %} {% if value.department == 2 %}システム開発{% endif %} {% if value.department == 3 %}営業{% endif %}</td> <!-- 更新と削除のボタン表示 --> <td class="edit"> <button><a href="{% url 'employee:update' id=value.id %}"><img src="{% static "employee/update-btn.png" %}"></a></button> <button id='del_btn' class='del_btn' onclick="confirm();" type="submit"><img src="{% static "employee/delete-btn.png" %}"></button> </td> </td> </tr> <form name="delete_form" id="delete_form" method="post" action="{% url 'employee:delete' id=value.id %}"> {% csrf_token %} <div id="del_dialog" style="display:none;"> <p>この行を削除しますか?</p> </div> </form> {% endfor %} </table> <script type="text/javascript"> function confirm() { $('.del_dialog').hide(); $('.del_btn').on('click',function(e){ e.preventDefault(); $('#del_dialog').dialog({ title:"登録者情報の削除依頼", modal:true, buttons:{ "はい":function(){ $('.del_btn').closest('form').submit(); }, "いいえ":function(){ $(this).dialog("close"); } }, }); }); }; </script> </div> </div>

試したこと

①に関してはformタグの記述場所が問題なのではと考えていますが
for文外に記述するとidが受取れなくて一覧表示画面が表示されません。
https://gyazo.com/005a6559e815e9e5bdbb7be751c6fe52

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

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

$('.del_btn').on('click',function(){

クリックイベントを止めてないからでは?

javascript

1 $('.del_btn').on('click',function(e){ 2 e.preventDefault(); 3

#sample

javascript

1<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 2<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> 3<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" /> 4<script> 5$(function(){ 6 $('#del_dialog').hide(); 7 $('#del_btn').on('click',function(e){ 8 e.preventDefault(); 9 $('#del_dialog').dialog({ 10 modal:true, 11 buttons:{ 12 "はい":function(){ 13 $('#del_btn').closest('form').submit(); 14 }, 15 "いいえ":function(){ 16 $(this).dialog("close"); 17 } 18 } 19 }); 20 }); 21}); 22</script> 23<form> 24<input type="hidden" name="del" value="1"> 25<button type="submit" id="del_btn">削除</button> 26</form> 27<div id="del_dialog"> 28<p>この行を削除しますか?</p> 29</div>

投稿2021/06/24 06:10

編集2021/06/25 00:21
yambejp

総合スコア116724

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

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

shunxile

2021/06/24 23:19

>>yambejpさん 回答ありがとうございます。修正しましたが『はい』・『いいえ』共に変化なしです
yambejp

2021/06/25 00:21

sample追記しておきました コピペして動作確認してください
shunxile

2021/06/25 01:19

>>yambejpさん ありがとうございます! sampleを参考にコードを修正したところ期待していた動作が得られました。 本当にありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問