RedmineのプラグインであるViewCustomizePluginを利用し、チケット更新(送信ボタンクリック)時にカスタムフィールドのバリデーションチェックを実現したいです。
要件
・送信ボタンクリック時にチェック対象カスタムフィールド(ID:1,2,3)の値が重複している場合はバリデーションエラーとしてメッセージを出力したのち、submit処理をキャンセルさせる。
・チェックOKの場合は最終更新者、最終更新日を別のカスタムフィールド(ID:4,5)にそれぞれセットし、submit処理を完了させる。
テストコード
JavaScript
1// 今日の日付取得 2function getDate() { 3 var now = new Date(); 4 now.setDate(now.getDate()); 5 return yyyymmdd = now.getFullYear() + '-' + 6 ("0"+(now.getMonth() + 1)).slice(-2) + '-' + 7 ("0"+now.getDate()).slice(-2); 8}; 9//バリデーションチェック兼最終更新日、最終更新者の自動入力 10$('#issue-form').submit(function(e){ 11 var loginid = ViewCustomize.context.user.id //ユーザーID 12 var visible1_1 = $('#issue_custom_field_values_1').val(); //値1 13 var visible1_2 = $('#issue_custom_field_values_2').val(); //値2 14 var visible1_3 = $('#issue_custom_field_values_3').val(); //値3 15 16 //値1、2、3の入力エラー判定(重複している場合にエラー) 17 if ( "visible1_1" == "visible1_2" || "visible1_1" == "visible1_3" || "visible1_2" == "visible1_3" ) { 18 alert('値1,2,3が重複しています。\n項目を確認下さい。'); 19 e.preventDefault(); 20 } 21 //最終更新日、最終更新者の自動入力 22 $('#issue_custom_field_values_4').val(getDate); //最終更新日 23 $('#issue_custom_field_values_5').val(loginid); //最終更新者 24});
コード挿入位置
Path pattern: /issues
Project pattern: ^xxxxx(正しいことは確認済み)
挿入位置:チケット入力欄の下
検証状況とお願い事項
e(vent).preventDefaultメソッドを使用して処理キャンセルできるのではと考えてみました。
ですが、ifステートメントや最終更新日、最終更新者の自動入力はデバッグでも問題ないことは確認しましたが、処理キャンセルがうまくいかないです。
Redmine(ViewCustomizePlugin)及びJavaScriptに知見のある方で、対処方法をご教示いただけますと幸いです。
よろしくお願いいたします。
あなたの回答
tips
プレビュー