2012-07-14 21 views
7

ここではテキストの表示/非表示を切り替える小さなスニペットです。問題は、 "readless"クラスのclickイベントが発生しないことです。通常はjQueryの「ライブ」機能を使用していましたが、「使用」に賛成して非難されて以来、どうすればいいのでしょうか?ここで バージョン1.7のjQuery "live"の使い方が分かりません

はjsfiddleです: http://jsfiddle.net/SSAu2/

コード:

$(document).ready(function(){ 

    var showHiddenText = function(e){ 

     e.preventDefault(); 

     var $this = $(this); 
     $this.prev().fadeIn(); 
     $this.text("less").removeClass("readmore-anchor").addClass("readless-anchor"); 
    }; 

    var hideShownText = function(e){ 

     e.preventDefault(); 

     var $this = $(this); 
     $this.prev().fadeOut(); 
     $this.text("more").removeClass("readless-anchor").addClass("readmore-anchor"); 
    }; 

    $(".readmore").after("<a href='#' class='readmore-anchor'>More</a>"); 
    $(".readmore-anchor").on("click", showHiddenText); 
    $(".readless-anchor").on("click", hideShownText); 

});​ 
+0

+1その[ '.live()'廃止されました](HTTP、あなたが使用して行われているかもしれないものにです.com)と(2)それについて何かしたい。あまりにも多くの質問と答えがまだ '.live()'を使っています。 –

+0

ありがとうございます。私はそれが私のブログにそれについての記事を書いたので、それが重要だと思う:) –

答えて

3

そこには存在しない時間セレクタ「.readless-anchor」と一致する要素。方法は.on()ですが、親として使用するには1つの要素が必要です。その子孫の下で発生するすべてのイベントは、親プロセスを呼び起こし、適切なハンドラを呼び出します。そのため、jQueryの主セレクタが既に存在することが重要です。 documentationから

イベントハンドラはのみ、現在選択された要素にバインドされています。コードが.on()を呼び出すときに、ページに が存在していなければなりません。

.on()関数の2番目のパラメータは、フィルタリングするセレクタです。

あなたのケースでは、.on()bodyに固定してクラスでフィルタすることができます。 // liveisdeprecated:

$("body").on("click", ".readmore-anchor", null, showHiddenText); 
$("body").on("click", ".readless-anchor", null, hideShownText); 

これは、ソートオフ同等の(1)を実現するための.live()

$("body").find(".readmore-anchor").live('click', showHiddenText); 
+0

ありがとう、これは非常に良い説明です:) –

+0

これは良い+1 – Rasmus

6

あなたはこのようにしてみてください可能性がありますDOMレディ機能がで、実行

$(document).on("click",".readmore-anchor", showHiddenText); 
$(document).on("click",".readless-anchor", hideShownText); 

Live demo

+0

ありがとう!よく働く! –

関連する問題