app.record.detail.showイベントが呼ばれない?

昨日気づいたのですが、以下の処理だけのスクリプト(test.js)だけでも、レコード詳細画面表示時のイベントが呼ばれません。

画面上部の次のレコード表示のリンクをクリックした際は、イベントが呼ばれているようです。

JQueryを使わなければ、イベントが呼ばれるようなので、JQueryの利用しているバージョンに問題があるのもしれません。。この後で、バージョン変えてみて確認してみます。

2018 年 3 月 16 日(金)午前 1:00- 午前 2:00(JST)の緊急メンテナンスで修正される範囲であれば良いのにと期待してますが、何か情報をご存知でしたら、共有して頂けると助かります。

田口さん
cstapの瀧ヶ平です。

jQueryのドキュメントを参照するとわかるのですが、jQuery(function(){})及びそれと等価なjQuery(document).ready(function(){})で渡されるコールバック関数の処理はDOMContentLoadedイベントの発火タイミングで評価されます。

そのため、kintoneのイベント登録関数はHTMLが全て解析、描画されたタイミングで行われ、それはapp.record.detail.showのイベント発火タイミングよりも後になっているのだと思われます。

そのため、jQueryを介さない即時関数内にイベント登録処理を記述すれば解決すると思われます

瀧ヶ平様

ありがとうございます。

おかげ様で、解決はできましたが、追加で質問がございます。

 

対処としては、以下のようにJQueryを介さずに処理をするようにしました。

間違ってるかもしれませんが、以下のように理解をしました。

 

■追加の質問■==============================

ご教授いただいたイベント発火のタイミングを理解せず、以下のように他のkintoneイベントをJQueryのreadyの中で記述してしまってましたので、

それらを修正をしようと思いますが、全てのkintoneイベントを即時関数に書き換える必要がありますでしょうか?

以下のサンプルを見ると、index.showイベントは大丈夫そうですので、どのイベントは即時関数に直す必要があるかご教授頂けると大変助かります。

https://developer.cybozu.io/hc/ja/articles/204695384

 

 

 

どうも検証をしてみたところ、index.showでも間に合わない時があるようなですね。

読み込む画像や関連データなどのコンテンツが多いページでは、特に顕著に事象が出ていただけで、本質的には瀧ヶ平様の回答のとおり動作していることがわかりました。

 

kintoneイベントは、即時関数 」で実行するように対応します。

 

とても、勉強になりました!ありがとうございます。

本件、下記により詳細な対処方法が記載されてましたので、もし同様のことで困ってるかたは下記をご参考ください。

 

イベントハンドラー登録の適切なタイミングについて

https://developer.cybozu.io/hc/ja/articles/360000882123