5

最近、JQuery をバージョン 1.9 にアップグレードしました。バージョン 1.4 では、次のようなことをしていました。

     var windowEvents = $(window).data("events");
     if (windowEvents.unload.length > 0) {
          // some fun stuff
     }

もちろん、jQuery 1.8 ではこの機能は削除されました。いくつかの調査の後、これを回避するための提案を見つけました。

     var windowEvents = $._data($(window), "events");

しかし、コンソールによると、windowEvents は定義されていません。私は何を間違っていますか?他の提案はありますか?

前もって感謝します :)

4

4 に答える 4

3

$._dataイベントハンドラーがバインドされている場合、私にとってはうまくいくようです:

$(window).on('unload', function() {
   // do stuff
});

if (($._data( window, 'events' ).unload || []).length) {
    console.log('unload is bound');
}else{
    console.log('unload is NOT bound');
}

フィドル

于 2013-07-09T17:45:29.180 に答える
2

http://dbj.org/dbj/2013/04/09/list-of-jquery-events/で解決策を見つけました

そのベースは次のとおりです。

/* (c) 2013 by DBJ.ORG, GPL/MIT applies */
jQuery.events = function (expr ) {
  var rez = [], evo ;
   jQuery(expr).each(
      function () {
         if ( evo = jQuery._data( this, "events"))
           rez.push({ element: this, events: evo }) ;
     });
 return rez.length > 0 ? rez : null ;
}

それを使用するには、次のように呼び出します。

jQuery.events("div");

div は任意の jquery セレクターの場所です。jQuery 1.9 で試してみましたが、とてもうまくいきました。

于 2014-04-10T08:12:37.623 に答える
1

windowEvents が定義されているかどうかを確認するチェックを含めることになりました。さらに、イベントを要求するときに [0] を含めました (この解決策はここにあります: jQuery 1.8 find event handlers )。したがって、最終的なコードは次のようになります。

var windowEvents = $._data($(window)[0], "events");
if (windowEvents && windowEvents.unload.length > 0) {
    // some fun stuff
}

これは、アップグレード前と同じように機能しています。ご協力いただきありがとうございます!

于 2013-07-09T18:30:28.267 に答える
0

現在も同じ場所に保管されています。ただし、バインドされたイベントのみを格納し、少なくとも 1 つがバインドされた後にのみ格納されます (それ以外の場合data()は戻りundefinedます)。

そのため、条件を変更する必要があります

var windowEvents = $(window).data("events") || {};
 if (windowEvents.unload && windowEvents.unload.length > 0) {
      // some fun stuff
 }
于 2013-07-09T17:40:42.873 に答える