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

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

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

Redmineは、プロジェクトのタスク管理、進捗管理、情報共有が可能な、 オープンソースプロジェクト管理ソフトウェアです。

Q&A

解決済

1回答

1234閲覧

Redmineでチケット編集+送信すると、なぜか同じPOSTが2回発生する

otake

総合スコア8

Redmine

Redmineは、プロジェクトのタスク管理、進捗管理、情報共有が可能な、 オープンソースプロジェクト管理ソフトウェアです。

0グッド

0クリップ

投稿2020/02/13 16:05

どなたかお分かりになる方がおりましたら、ご教示いただけますでしょうか。

【使用環境】
サーバ:WindowsServer2012 R2
インストール:
・bitnami-redmine-4.0.3-2-windows-x64-installer
→Redmine 4.0.3.stable
→Ruby version 2.5.3-p105 (2018-10-18) [x64-mingw32]
→Rails version 5.2.2.1
→Database adapter Mysql2

 クライアント
・InternetExplorer11

 プラグイン
・View Customize plugin
・Redmine Absolute Dates plugin
・My Page Blocks plugin
・Redmine Absolute Dates plugin

【事象】
Redmineの一般ユーザーでチケットを取得/更新し、「送信」ボタンを押下したところ、
「このチケットを編集中に他のユーザーが更新しました」とメッセージが表示され、
他のユーザー欄に自分の名前が表示される。

【調べて分かったこと】
・ApacheのAccessログを確認すると、同時刻に同じ端末から同じ内容のPOSTが二つ記録されている
・Redmineのproductionログを確認すると、POSTされた更新内容が同じ内容
・管理者権限のRedmineユーザーでは、この事象が発生しない
・一般ユーザーで高頻度で発生する

【被疑箇所】
■View Customizeで、下記の内容を入れてます
パス:/issues
位置:チケット入力欄の下
種別:JavaScript
--------------------------------------------------------
$(function() {

$('#issue-form').submit(function() {

    ・・・いろいろな必須チェックや色付けなどの処理・・・

$('#issue-form').off('submit'); $('#issue-form').submit(); //再度送信 }); });

  --------------------------------------------------------

  ・このスクリプトを削除すると、事象が出なくなりました。
・$('#issue-form').off('submit') の前にスリープを3秒いれると
出にくくなりました。
(1秒だとほぼ毎回、2秒だと8回に1回程度発生)
・「必須チェックや色付けなどの処理」を削除して、上記スクリプト
だけにしても発生
・$('#issue-form').off('submit'); を削除すると、必須チェックによって
チケット編集画面に戻ったとき、「送信」ボタンが押下不可能となる
・$('#issue-form').submit(); を削除すると、そもそも最初の
「送信」ボタンが押下不可能となる。

【どうしたいのか】
カスタマイズスクリプトの中で実施する必須チェックや色付けは必須機能のため、
この被疑スクリプトを削除することができません。
他ユーザーの表示が自分の名前なので、本当に他ユーザーが編集したものと
切り分けが付けられるのと、3秒のスリープを入れることで同事象が発生
しにくくなるため、暫くはなんとか切り抜けられそうです。
しかし最終的には、スリープなしで事象を回避させる必要があるため、
どなたか、お分かりになる方がおりましたら、ご教示お願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

$(document).off('click', '#issue-form input[type="submit"]');
$(document).on('click', '#issue-form input[type="submit"]', function() {

のようにすれば良いのでは。

投稿2020/02/14 10:00

takashikawai

総合スコア172

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

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

otake

2020/02/16 12:13

takashikawaiさん ご教示、ありがとうございます。 明日(月曜日)、教えていただいた内容で試してみます。
otake

2020/02/17 15:37

$('#issue-form').submit(function() { の部分を、教えていただいたものに変更してみたところ・・・ 事象が出なくなりました!! 一通りテストしてみましたが、問題なさそうです。 javascriptもjQueryも素人で、なぜこれでうまくいくのか分かりませんが、 それについては、いろいろ調べてみたいと思います。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問