2011-01-17 25 views
1

jQuery next()メソッドを試してみると、live()では機能しません。jQuery next()live()で動作しません

まず第一に、ここに私のコードは次のとおりです。

$(".toggle_button").live('click', function() { 
    $(this).html($(this).html() == '-' ? '+' : '-'); 
    $(this).next(".info_section").toggle(400); 
}); 

ここでHTML

<div class='section_toggle_container'> 
    <div class='toggle_button'>-</div> 
    <strong>Driver Information:</strong> 
</div> 
<div class='info_section'> 
    info here 
</div> 

は問題は多分.info_sectionが到達不能になって、.toggle_buttonがネストされているという事実にあるのだろうのか?

2番目の行は、live()イベントで与えられた要素を変更しているため、うまく動作します。しかし、3行目は問題がどこにあるかです。これはnext()を使用しているためです。

誰でも私のnext()問題の解決に手伝ってもらえますか? HTMLを見ると

+0

これは私が考えているHTMLを表示する必要があります。 '.toggle_button'要素の後に' .info_section'が存在しない可能性はありますか?あるいは、上の行の '.html()'コールで 'this'を破壊していますか?代わりに '.text()'を使ってみてください。 – Orbling

+1

あなたはhtmlコードを見ることができますか? – amosrivera

+0

問題はなんですか? **あなたのHTMLはどのように見えますか?** 'next()'は、 'this'の次の兄弟クラスが' info_section'クラスを持っている場合に限り**要素を返します。 'info_section'クラスで次の兄弟を返さない** **です。 –

答えて

3

があなたの文をshould't:

$(this).next(".info_section").toggle(400); 

があること:

$(this).parent().next(".info_section").toggle(400); 
1

あなたが作業答えを持っているが、私は-のあなたのトグルについての提案を残したかったし、 +の場合は、HTMLの代わりにtext()を使用し、固有のtexttext()の場合、htmlの場合はhtml())を使用することをおすすめします。

$(".toggle_button").live('click', function() { 
    $(this).text(function(index,text) { 
     return text == '-' ? '+' : '-'; 
    }); 
    $(this).parent().next(".info_section").toggle(400); 
}); 

そして、あなたがにつながる、それは後でそれを再作成することを防止するためにキャッシュを使用して価値がある回以上、それを呼び出している場合は、さらに、私は、あなたの$(this)をキャッシュすることをお勧めしたい:の

$(".toggle_button").live('click', function() { 
    var $this = $(this); 
    $this.text(function(index,text) { 
     return text == '-' ? '+' : '-'; 
    }); 
    $this.parent().next(".info_section").toggle(400); 
}); 

もちろん、あなたがより大きいのjQueryのバージョンを使用して、またはあなたがではなく、on()方法を使用する必要があり、1.7を含めている場合(jQueryの1.7以降)与えるだろうlive()を、非推奨:

$(".toggle_button").on('click', function() { 
    var $this = $(this); 
    $this.text(function(index,text) { 
     return text == '-' ? '+' : '-'; 
    }); 
    $this.parent().next(".info_section").toggle(400); 
}); 

これは本当に単なるアドバイスですが、残念なことに、理解できないコードがコメントに貼り付けられるのを防ぐための回答として投稿されています。

参考文献:

関連する問題