2012-03-14 15 views
0

要素(星評価)に簡単なツールチップを作成したいと思っています。開始するたびにマウスを移動し、別のメッセージが表示されるようにします。jQueryリスナーを作成してマークアップを反復する方法

私が直面している問題は、星印の出力が各星に一意の識別子を与えるわけではないので、私は星のコレクションごとに繰り返し、各星にリスナーを適用する必要があります。

各星1-5は同じメッセージを持ちます。星1 =メッセージ1、星2 =メッセージ2など

誰かが助けてくれる人なら、リスナーを作成し、その特定の星にhtmlとメッセージを適用する方法を知りたいと思いますこれはjQueryで行います。

ここ

は星マークアップ出力である

<div class="stars"> 
    <div class="ui-stars-star ui-stars-star-on ui-stars-star-disabled"> 
     <a title="">1</a> 
    </div> 
    <div class="ui-stars-star ui-stars-star-on ui-stars-star-disabled"> 
     <a title="">2</a> 
    </div> 
    <div class="ui-stars-star ui-stars-star-on ui-stars-star-disabled"> 
     <a title="">3</a> 
    </div> 
    <div class="ui-stars-star ui-stars-star-on ui-stars-star-disabled"> 
     <a title="">4</a> 
    </div> 
    <div class="ui-stars-star ui-stars-star-on ui-stars-star-disabled"> 
     <a title="">5</a> 
    </div> 

    <input type="hidden" value="5" name="rate_overall" disabled=""/> 
</div> 

おかげ

答えて

0

あなたは(異なる要素について異なっている$(this)を使用して)各要素に同じイベントリスナーをバインドし、それが実行されますときにテキストを確認することができます:

$(".ui-stars-star").mouseover(function() { 
    var text = $(this).find("a").text(); // e.g. "1" or "2" 

    // now use `text` to fetch the correct message and show it 
}); 
+0

おかげで、ちょうどので、私は、これは、それが特定を表示するには何か星を見つけるだろうか、理解メッセージ? – zizther

+0

@zizther:jQueryは基本的に 'this'がイベントを派遣した要素を指すように作られています。だから、別の要素をホバリングすると、別の '$(this)'となり、 '$(this).text()'となります。 – pimvdb

0

なぜ反復するのですか?単一の呼び出しが動作しますので、あなたの星のためのクラスがあります。

$('.ui-stars-star') 
    .on('mouseenter', function() { 
    ... 
    }) 
    .on('mouseleave', function() { 
    }) 

しかし、このことは特に効果的な、それはそれでそのクラスを持っている一つ一つの要素のハンドラーを登録するので。つまり、あなたの現在のコードがやることだ。

トレードオフは.onの3つのパラメータバージョンを使用して、イベントの委任を使用することです:

$('.ui-stars-star', document, function() { ... }); 

CPU効率がされているが、ここでの欠点 - jQueryので委任ハンドラシステムは、一つ一つのマウスの動きのために呼び出されますページ上に

+0

ありがとうございます。スター1にカーソルを置いてメッセージ1を表示し、スター2のメッセージ2にカーソルを合わせるなど、特定のメッセージを表示するためにどの星が表示されているかを知るにはどうすればよいですか? – zizther

+0

@zizther '$(this).index()'現在のリストでスターの位置(ゼロベース)を与えます。 – Alnitak

0

index()機能を使用できます。すなわち:

$('.ui-stars-star').mouseenter(function() { 
    switch ($(this).index()) { .. 
} 
+0

ありがとう、ちょっと分かりましたが、特定のメッセージを表示するためにどのようなスターが見つかったでしょうか? – zizther

0

あなたは、そのテキストで要素をつかむためにjQueryの:containsセレクタを使用することができます。

$(".ui-stars-star a:contains(1)") 
$(".ui-stars-star a:contains(2)") 
...so on 
+0

ありがとう、これは役に立ちます – zizther

関連する問題