1

しばらくの間、私を悩ませている何か、jQuery APIは言います:

As of jQuery 1.7, the .live() method is deprecated. Use .on() to attach event handlers.

ウィジェット管理側(ウィジェットクラスのform()アクション)にjqueryのものを追加しようとすると、on()を使用できず、live()を使用してジョブを実行できることに驚きました。

だからここに私の質問があります:なぜそして何が私が誤解しているのですか?

よろしく、そしてもちろん、あなたの時間のためのthx。

ps私は>=1.7バージョンを使用してオフカースです。

編集:

<?php
    class Test_Slider_Widget extends WP_Widget 
        { 
            public function form( $instance ) { 
                ?>
             <span id="test">Test</span>
             <script> 
             jQuery(document).ready(function($) {
                 /* $('#test').on('click', function { //doesn't work
                     alert('test'); 
                 }); */
                 $('#test').live('click', function { //work
                     alert('test');
                 });

             });
             </script>


 <?php }

編集2:わかりました。常に$ this-> get_field_id('id-text')を使用して一意のIDを設定してください。そうしないと、WordPress管理者のウィジェットの重複コードが原因でIDが重複します。道を教えてくれたXecに感謝します:)

4

1 に答える 1

1

非推奨の.live()メソッドはにバインドされdocument、クリックするたびに#test、ハンドラーを呼び出す前にセレクターが一致するかどうかが確認されます。この動作が必要な場合は、デリゲート構文.on()を使用できます。

詳細については、http://api.jquery.com/on/#direct-and-delegated-eventsを確認してください。

簡単に修正するには.live()、次のようなコードを模倣できます。

$(document).on('click', '#test', function () {
    alert('test');
});

より効率的なコードを得るにはdocument、静的な祖先に一致するセレクターに置き換えます。#test

お役に立てれば!

編集:

あなたの「編集2」から、あなたの問題は重複したIDであることがわかりましたが、後世のためにこの回答をここに残しておきます。

于 2012-12-21T12:02:42.467 に答える