新規投稿
フォローする

レコード編集後にlocation.hrefした時のダイアログを消したい

お世話になります。

下記のコードのとおり、submitイベントでAPIを使ってレコードの登録・更新を行って、保存をせずに指定したページへ移動するようにしたいです。

ところが、app.record.edit.submitの時のみ、ページ移動時に確認のConfirmが実行されてしまいます。*新規作成時はダイアログがでません。

window.beforeunloadを空にしてあげると、ダイアログがでないという情報を見つけて試してみましたが、依然出てしまいます。

なんとか解決方法はないでしょうか。よろしくお願いいたします。

var events = ['app.record.create.submit','app.record.edit.submit'];
kintone.events.on(events, function(e) {

(省略)

kintone.api(kintone.api.url('/k/v1/bulkRequest', true), 'POST', bulk_requests_body, function(resp) {

if(e.type === "app.record.edit.submit"){
  window.beforeunload = function(){}  //これを入れてみましたが効果なし
  location.href = '/k/' + kintone.app.getId() + '/show#record=' + e.recordId;
}else{
  location.href = '/k/' + kintone.app.getId() + '/show#record=' + resp.results[0].id;
}

return false;
},function(error) {

console.log(error);
reject(error);

});

 

0

6件のコメント

Avatar
cybozu Development team

「このサイトを離れてもよろしいですか?」の確認ダイアログでしょうか。

app.record.create.submit とapp.record.edit.submit の挙動が異なるというのが仕様として合っているのか気になります。

レコードの登録・更新している部分のコードも見せていただいてよろしいでしょうか。

 

 

0
Avatar
瀧ヶ平

西尾英道さん
cstapの瀧ヶ平です

windowへのbeforeunloadイベントのイベントハンドラの登録は addEventListener を用いて行われているので、直接beforeunloadイベントを登録している関数の参照が取れない以上 removeEventListener メソッドを使うこともできないのでイベントリスナの削除によるダイアログの抑止は不可能かと思います。

ダイアログの抑止だけなら、追加・編集画面表示時のレコードの状態のままでページ遷移すればよいので、 表示時イベントでのレコードオブジェクトを変数に保存して起き、kintone.app.record.set メソッドを利用してレコードの値を最初に戻してからページ遷移するような処理を書けばできるのではないでしょうか?

 

参考になりますでしょうか?

0
Avatar
西尾英道

ダン吉さま 瀧ヶ平さま

ご回答ありがとうございます。

「このサイトを離れてもよろしいですか?」の確認ダイアログのことです。質問が曖昧で申し訳ございません。

 

質問後、いろいろ試してみたところ、挙動の差ですが、イベントではなくウィンドウにあるように思えました。

window.open()にて編集画面を新規で開いて、遷移した場合は、確認ダイアログは表示されませんでした。

とりあえず編集ボタンを自作のものにしてwindow.open()で編集画面を表示するようにして、保存後は window.close と window.opener.location.reload にてとりあえず対応できました。

 

とはいえ、瀧ヶ平さまの方法の方がコンパクトに実現できそうです。大変わかりやすいご助言をいただき感謝しております。ありがとうございました。

 

 

0
Avatar
khosokai

お世話になっております。

西尾様と同様の問題に直面しております。

瀧ヶ平様よりコメントいただいている、kintone.app.record.set メソッドですが、

kintone.events.on のイベントハンドラ内でどのように活用できますでしょうか。

お手数ですが、ご助言頂けますと幸いです。

0
Avatar
西尾英道

khosokaiさま

 

お世話になります。質問した水野です。

 

おそらくshowイベント時にeventの値もしくは、kintone.app.record.get() で取得した値を

変数にjQuery.extendなど使ってコピーしておいて、

submitイベント時にkintone.app.record.set()で初期値に戻すという方法かと思います。

 

私も一度試しましたが、kintone.app.record.set()の処理を待たずに保存されてしまうため、うまくいきませんでした。

 

いずれにしてもkintone.app.record.set()の処理はサブテーブルや項目数が多いと非常に遅い!ため、

Kintone標準の入力画面をangularやjQueryを使って、標準フィールドに入力しないように自作するしかない・・・、と現在考えております。うーむ。

0
Avatar
Tguchi

補足:

下記Cybozuの注意事項を見る限り、submitイベントを含むkintone.events.on のインベントハンドラ内では「kintone.app.record.set」を実行できないようです。


https://developer.cybozu.io/hc/ja/articles/201942014#step2

注意事項

  • kintone.events.on のインベントハンドラ内で kintone.app.record.set および kintone.mobile.app.record.set を実行することはできません。上記のイベントハンドラ内ではレコードデータの取得は引数のeventオブジェクトを、レコードデータの更新はeventオブジェクトのreturnを使用してください。
0
サインインしてコメントを残してください。