0

重複の可能性:
jQuery 1.7 - live() を on() に変える

私はこのコードを持っています:

<script>
        jQuery('#ultimecomunicazioni')
    .live("mouseenter", function() {
        jQuery(this).append('<span id="ultimecomunicazioni_appear" style="font-weight:normal;margin-left:5px">(<a style="color:grey" href="<?php echo esc_url( home_url( '/' ) ); ?>comunicazioni/">tutte</a>)</span>');
    })
    .live("mouseleave", function() {
        jQuery(this).children('#ultimecomunicazioni_appear').remove();
    });
</script>

2 つの .live を .on に変更し、2 つのハンドラーを 1 つに結合したいと思います。私はTJによってこの例を使用しようとしましたが、最後の「tr」から混乱します..次のようになるはずですが、よくわかりません:

<script>
jQuery('#ultimecomunicazioni').on({
    'mouseenter' : function () {
        jQuery(this).append('<span id="ultimecomunicazioni_appear" style="font-weight:normal;margin-left:5px">(<a style="color:grey" href="<?php echo esc_url( home_url( '/' ) ); ?>comunicazioni/">tutte</a>)</span>');
     },
    'mouseleave' : function () {
        jQuery(this).children('#ultimecomunicazioni_appear').remove();
    }
});
</script>
4

6 に答える 6

1

のドキュメントと委任されたイベント.liveの部分を読むだけで、かなりうまく説明されています。.on

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

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

$(document).delegate(selector, events, data, handler); // jQuery 1.4.3+

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

ただし、特定の ID を持つ 1 つの要素に委任された機能が必要になる理由がわかりません。この問題が発生した可能性があります。

于 2013-02-03T13:42:25.767 に答える
1

これを試してください

$(document).on("mouseenter mouseleave", "#ultimecomunicazioni" , function(e) {
    if(e.type === 'mouseenter'){
        $(this).append('<span id="ultimecomunicazioni_appear" style="font-weight:normal;margin-left:5px">(<a style="color:grey" href="comunicazioni/">tutte</a>)</span>');
    } else {
        $('#ultimecomunicazioni_appear').remove();
    }
});

php echo: JavaScript(サーバー側とクライアント側の言語)では機能しないため、小さなコードを削除しました

于 2013-02-03T15:01:13.827 に答える
0

私があなたのコードを見たとき、これはあなたがphpコンテンツを追加する部分に問題があるようです:

jQuery('#ultimecomunicazioni').on({
'mouseover': function () {
    jQuery(this).append('<span id="ultimecomunicazioni_appear" style="font-weight:normal;margin-left:5px">(<a style="color:grey" 
href="<?php echo esc_url( home_url( / ) ); ?>comunicazioni/">tutte</a>)</span>');
},    //---------------------------^-^-----------------------here
    'mouseleave': function () {
    jQuery(this).children('#ultimecomunicazioni_appear').remove();
}
});

ここで引用符を削除したところ、コードは機能しました:http: //jsfiddle.net/CrXZr/

于 2013-02-03T13:58:28.093 に答える
0
$(document.body).on({
    'mouseenter' : function () {
        $('<span id="ultimecomunicazioni_appear"/>').appendTo($(this));
 },
    'mouseleave' : function () {
       $(this).find('#ultimecomunicazioni_appear').remove();
 }, '#ultimecomunicazioni'

});

于 2013-02-03T13:59:13.507 に答える
0

jQuerys の元のメソッド.live()はそのように特殊であり、常にイベント リスナーdocument.body. ほとんどの場合、ハンドラーをドキュメントの一番上に配置する必要がなかったので、これも大きな批判点でした。

.delegate()は現在の形式に似.on()ていましたが、引数の順序が変更されました

method(<element>, <event>, <callback>)

の中へ

method(<event>, <element>, >callback>)

それが元のコードに影響するかどうかはわかりませんが、何らかの理由でイベント ハンドラーが要求されたものではdocument.bodyなくレベルにあることが必要な場合は.on()、問題が発生する可能性があります。

于 2013-02-03T13:47:01.393 に答える
0

これを試すことができます:

<script>
jQuery('#ultimecomunicazioni').parent().on({
    'mouseenter' : function () {
        jQuery(this).append('<span id="ultimecomunicazioni_appear" style="font-weight:normal;margin-left:5px">(<a style="color:grey" href="<?php echo esc_url( home_url( '/' ) ); ?>comunicazioni/">tutte</a>)</span>');
     },
    'mouseleave' : function () {
        jQuery(this).children('#ultimecomunicazioni_appear').remove();
    }
},
'#ultimecomunicazioni'
);
</script>
于 2013-02-03T13:45:39.733 に答える