1

こんにちは、jquery にオーバーレイがあり、バージョン 1.6 でしか動作しませんが、最新のライブラリ 1.9.1 を追加したいのですが、Uncaught TypeError: Object [object Object] has no method 'live' at line 20 というエラーがあります。私のコードでは、私のコードはこれです。

(function($) {

    $('a[data-reveal-id]').live('click', function(e) {
        e.preventDefault();
        var modalLocation = $(this).attr('data-reveal-id');
        $('#'+modalLocation).reveal($(this).data());
    });


    $.fn.reveal = function(options) {


        var defaults = {  
            animation: 'fadeAndPop', //fade, fadeAndPop, none
            animationspeed: 300, //how fast animtions are
            closeonbackgroundclick: true, //if you click background will modal close?
            dismissmodalclass: 'close-reveal-modal' //the class of a button or element that will close an open modal
        }; 

        var options = $.extend({}, defaults, options); 

        return this.each(function() {

            var modal = $(this),
                topMeasure  = parseInt(modal.css('top')),
                topOffset = modal.height() + topMeasure,
                locked = false,
                modalBG = $('.reveal-modal-bg');


            if(modalBG.length == 0) {
                modalBG = $('<div class="reveal-modal-bg" />').insertAfter(modal);
            }           


            modal.bind('reveal:open', function () {
              modalBG.unbind('click.modalEvent');
                $('.' + options.dismissmodalclass).unbind('click.modalEvent');
                if(!locked) {
                    lockModal();
                    if(options.animation == "fadeAndPop") {
                        modal.css({'top': $(document).scrollTop()-topOffset, 'opacity' : 0, 'visibility' : 'visible'});
                        modalBG.fadeIn(options.animationspeed/2);
                        modal.delay(options.animationspeed/2).animate({
                            "top": $(document).scrollTop()+topMeasure + 'px',
                            "opacity" : 1
                        }, options.animationspeed,unlockModal());                   
                    }
                    if(options.animation == "fade") {
                        modal.css({'opacity' : 0, 'visibility' : 'visible', 'top': $(document).scrollTop()+topMeasure});
                        modalBG.fadeIn(options.animationspeed/2);
                        modal.delay(options.animationspeed/2).animate({
                            "opacity" : 1
                        }, options.animationspeed,unlockModal());                   
                    } 
                    if(options.animation == "none") {
                        modal.css({'visibility' : 'visible', 'top':$(document).scrollTop()+topMeasure});
                        modalBG.css({"display":"block"});   
                        unlockModal()               
                    }
                }
                modal.unbind('reveal:open');
            });     


            modal.bind('reveal:close', function () {
              if(!locked) {
                    lockModal();
                    if(options.animation == "fadeAndPop") {
                        modalBG.delay(options.animationspeed).fadeOut(options.animationspeed);
                        modal.animate({
                            "top":  $(document).scrollTop()-topOffset + 'px',
                            "opacity" : 0
                        }, options.animationspeed/2, function() {
                            modal.css({'top':topMeasure, 'opacity' : 1, 'visibility' : 'hidden'});
                            unlockModal();
                        });                 
                    }   
                    if(options.animation == "fade") {
                        modalBG.delay(options.animationspeed).fadeOut(options.animationspeed);
                        modal.animate({
                            "opacity" : 0
                        }, options.animationspeed, function() {
                            modal.css({'opacity' : 1, 'visibility' : 'hidden', 'top' : topMeasure});
                            unlockModal();
                        });                 
                    }   
                    if(options.animation == "none") {
                        modal.css({'visibility' : 'hidden', 'top' : topMeasure});
                        modalBG.css({'display' : 'none'});  
                    }       
                }
                modal.unbind('reveal:close');
            });     


        modal.trigger('reveal:open')

            //Close Modal Listeners
            var closeButton = $('.' + options.dismissmodalclass).bind('click.modalEvent', function () {
              modal.trigger('reveal:close')
            });

            if(options.closeonbackgroundclick) {
                modalBG.css({"cursor":"pointer"})
                modalBG.bind('click.modalEvent', function () {
                  modal.trigger('reveal:close')
                });
            }
            $('body').keyup(function(e) {
                if(e.which===27){ modal.trigger('reveal:close'); } // 27 is the keycode for the Escape key
            });



            function unlockModal() { 
                locked = false;
            }
            function lockModal() {
                locked = true;
            }   

        });
    }
})(jQuery);
4

3 に答える 3

17

livev1.9で jQuery から削除されました。いくつかのバージョンで非推奨になっています (v1.7 以降)。

delegateまたはon(各呼び出しの上にコメントを追加しました)を使用するように書き直すことについて、ドキュメントは次のように述べています。

後継者に関してメソッドを書き直すの.live()は簡単です。これらは、3 つのイベント添付メソッドすべてに対する同等の呼び出しのテンプレートです。

// `live`, now removed
$(selector).live(events, data, handler);                // jQuery 1.3+

// `delegate`, superceded but not deprecated
$(document).delegate(selector, events, data, handler);  // jQuery 1.4.3+

// `on`, the latest 
$(document).on(events, selector, data, handler);        // jQuery 1.7+

したがって、あなたの場合、代わりに:

$('a[data-reveal-id]').live('click', function(e) { // ...

あなたが望むだろう

$(document).delegate('a[data-reveal-id]', 'click', function(e) { // ...
// Or
$(document).on('click', 'a[data-reveal-id]', function(e) { // ...

ただし、通常は、フックする要素の近くにコンテナー要素を見つけることができます。その場合は、document. たとえば、すべてのdata-reveal-idアンカーdivid "stuff". それよりも

$(document).on('click', 'a[data-reveal-id]', function(e) { // ...

クリックをアンカーに少し近づけたほうがよいでしょう。

$('#stuff').on('click', 'a[data-reveal-id]', function(e) { // ...

ただし、 以外に適切な共通の祖先要素がない場合はdocument、 を使用できますdocument

于 2013-03-05T08:14:39.463 に答える
0

また、移行プラグインもあります。これを使用して、非推奨および削除された機能を検出できます。

于 2013-03-05T08:33:13.837 に答える
0

As mentioned, it's been removed as of v1.9: http://api.jquery.com/live/

You can refactor your code, however, to something like:

$( document ).on( 'click', 'a[data-reveal-id]', function(e) { ... });
于 2013-03-05T08:17:10.423 に答える