[Redmine] チケット編集中にエンターキーでの誤送信を防ぐ

Redmineでチケットの作成や編集を行っている最中、題名などテキストボックスで間違えてエンターキーを押すと送信されてしまうことがありますよね。

もうストレスMAXでハゲ散らかしそうな勢いです。プロジェクトが終わるのが早いか、坊主になるのが早いかの戦いは避けらそうにないため、毛髪を守るために今回はテキストボックスでエンターキーが押されても送信されないようカスタマイズを行います。

ここではView Customizeプラグインを利用して実装します。インストール方法などは以下の記事をご覧ください。 blog.katsubemakito.net

設定する

パスのパターン

チケットを編集するタイミングは大きく2種類あり、それぞれのパスは次のようになります。

新規作成
/projects/.*/issues/new
編集
/issues/[0-9]{1,}

というわけで最終的に以下のようなパターンを入力します。ちょっと分かりづらいかなw

  • /(projects/.*/issues/new|issues/)

プロジェクトのパターン、挿入位置、種別

「プロジェクトのパターン」
要件に合う物を設定してください。
「挿入位置」
全ページのヘッダ
「種別」
JavaScript

コード

コード欄には以下のようなJavaScriptを入力します。もしカスタムフィールドなどを追加している場合など、テキストボックスが他にもある場合はidlist配列にidを追加します。

$(document).ready(function(){
  // 対象のテキストボックス一覧
  const idlist = [
    "#issue_subject",          // 題名
    "#issue_parent_issue_id",  // 親チケット
    "#issue_estimated_hours"   // 予定工数
  ];

  // エンターキーを押してもSubmitしない
  $(idlist.join(",")).keypress(function(e){
    if( e.which === 13 ){
      return(false);
    }
  });
});

keypressでキーが押された場合の処理を定義、e.whichで押されたキーを参照しています(13番はエンターキー)。falseをreturnで返すとSubmitイベントがキャンセルされます。