2010-11-26 3 views
4

は、私は次のJavaScript/jQueryの機能を持っている:それは作品jQueryののMouseEnter/mouseleave HTML() - スワップ問題

function addEventHandler(){ 

    $("div").mouseenter(function() { 
     $(this).html("Over"); 
    }).mouseleave(function() { 
     $(this).html("Out"); 
    }); 

} 

ではなく、完全に。 divは時々少し重なり合って(質問しないでください)、以下の画像が伝えようとするときに必ず「Out」値を取得するとは限りません。これは特にポインタを非常に速く動かすと起こります。

alt text

任意のアイデアをどのようにすべてのdiv要素がmouseleaveの「アウト」の値を取得することを確認しますか?ありがとう!

UPDATE:実際のコードの抜粋

私の本当の機能は、上記の例ほど単純ではないので、私はここで本当の機能の正確なコードが含まれていました:

function addEventHandlers(){ 

    var originalContent = ""; 

    $(".countryspots div").mouseenter(function() { 

     var thisClass = $(this).attr("class"); 
     var thisCountry = thisClass.split(" "); 
     var thisNumber = getNumber(thisCountry[1]); 

     originalContent = $(this).children("a").html(); 

     $(this).children("a").html("<span>" + thisNumber + "</span>"); 


    }).mouseleave(function() { 

     $(this).children("a").html(originalContent); 

    }); 

} 

そして、私のHTMLマークアップは次のようにされています

<div class="countryspots"> 
    <div class="america brazil"><a href="#"><span>Brazil</span></a></div> 
    <div class="america argentina"><a href="#"><span>Argentina</span></a></div> 
    <div class="europe ireland"><a href="#"><span>Ireland</span></a></div> 
    <div class="europe portugal"><a href="#"><span>Portugal</span></a></div> 
</div> 

一般的な考え方は、最も内側にあること国名である<span>mouseentergetNumber();から検索)の従業員を表す番号にスワップされ、その後mouseleaveにスワップされます。

実際の問題は、別のdivにポインタを移動すると、多くのdivが従業員番号を保持するということです。つまり、mouseleaveイベントはすべてのdivで実行されません。

ライブ例:http://jsfiddle.net/N9YAu/4/

は、この情報がお役に立てば幸いです。再度、感謝します!

答えて

2

問題は、すべてのアイテムに「元のコンテンツ」を格納する変数が1つのみで、mouseenterハンドラがmouseleaveハンドラの前にもう一度呼び出され、「元のコンテンツ」という変数ホバーの内容によって上書きされます。

スクリプトの最初に元の内容を保存し、各項目ごとに別々に保存する必要があります。私は一つの結合hoverであなたの独立したmouseenter/mouseleaveバインディングを交換しました、http://jsfiddle.net/N9YAu/5/

NB:私はjQueryのdata機能を使用してfollowign例でこれをやりました。それはおそらく終わりには同じですが、それを行うための「適切な方法」です。

+0

100万RoToRaありがとう!それは完全に動作します:) – o01

+0

Err ..完全にはないtho - 出口のイベントがトリガされないいくつかのdivがまだあります。 – o01

+0

^私を間違えないでください - あなたの提案は大きな改善をもたらしましたが、私が言ったように - 私がdivを渡って本当に速くポインタを動かすと、数字を保持する人はまだいます。 – o01

0

私は、問題を再現することができませんでした:

http://www.jsfiddle.net/N9YAu/1/

それはあまりにもそこに起こっているのでしょうか?

+0

あなたのバージョンは優れています。私はそこで同じ問題を経験しません。しかし、私のコードは上記の単純化された例よりも若干進んでいます。私はすぐに質問を更新します... – o01

+0

私はバグをここで再現しました:http://jsfiddle.net/N9YAu/4/ – o01

0

これらのdivのいずれかが、HTML内の他のdiv内にネストされますか?

トップレベルのdivに入るマウスポインターとは別のものに入るときに「離れる」ことはできません絶対に配置される)。

+0

うん、ちょっと - ちょっと。私はすぐに質問を更新します。ハングアップ... – o01