2013-03-06 16 views
5

Sayfamda bir "yardım" alanım var ve kullanıcı, yardım bilgilerinin güncellenmesi gereken bir masa üzerinde gezinirken. Sorun, tablo içinde her satırın 1 hücresinde bir onay kutusu var ve kullanıcı bu onay kutusunun üzerine geldiğinde, onay kutusunun mouseover olayının tablo olayını geçersiz kılmasını ve onay kutusunun görüntülenmesini istiyorum. Şu anda tablo mouseover iyi çalışıyor ama ben onay kutusu üzerinde fareyle hiçbir şey olmuyor. tablo için mouseover yanaEbeveyn öğesi de bir fareyle mizanpaja sahipse, bir alt öğe için nasıl mouseover olay ateşleme yapabilirim?

<table class="myTable"> 
    <tr> 
     <th>Col1</th> 
     <th>Col2</th> 
    </tr> 
    <tr> 
     <td><input class="myCheckbox" type="checkbox" /></td> 
     <td>Cell 2</td> 
    </tr> 
    <tr> 
     <td><input class="myCheckbox" type="checkbox" /></td> 
     <td>Cell 3</td> 
    </tr> 
</table> 

<div class="myHelpMenu"></div> 


$('.myCheckbox').mouseover(function() { 
    $('.myHelpMenu').html("this is my checkbox help"); 
}); 

$('.myTable').mouseover(function() { 
    $('.myHelpMenu').html("this is my tables help"); 
}); 

cevap

4

LIVE DEMO

Bu almak için saf JS kullanmak yerine, mouseover süpürdü edilir akım target elemanı kullanarak algılamak için güzel bir yoldur .tagName bir mesajları liste nesne oluşturabilir ve istediğinizi alın.

$('.myTable').mouseover(function(e) { 

    var tag = e.target.tagName; 

    var messages = { 
    "INPUT" : "this is my checkbox help", 
    "TABLE" : "this is my tables help" 
    }; 

    $('.myHelpMenu').text(messages[tag]); 

}); 

sever misin senin bilgi mesajını silmek istiyorsanız:

$('.myTable').on('mouseover mouseleave',function(e) { 

    var tag = e.target.tagName; 

    var messages = { 
    "INPUT" : "this is my checkbox help", 
    "TABLE" : "this is my tables help" 
    }; 

    $('.myHelpMenu').text(messages[tag]); 

    if(e.type=='mouseleave') 
    $('.myHelpMenu').empty(); 

}); 
+1

+1. – Popnoodles

+1

+1 kodlama stili için – Mercurybullet

+0

@Mercurybullet :) Teşekkürler hahaha ama sadece "tatlılık" düğmesi için ise +1'i kaldırabilirsiniz :) (kullanacağınız ve kötüye kullandığınız ş: S): D –

0

sadece yerine mouseenter diyoruz, bütün alan içindir. Daha sonra, tablodan çıktıktan sonra yeniden hizalamak için mouseout ekleyebilirsiniz.

+0

ama meydan girdi onay kutusu tablo içinde olduğunu, bu yüzden nasıl tablo için mouseout tetikleyecektir? – silvster27

+0

Birçok yoldan ancak Mercurybullet burada en iyi çözüme sahiptir. Gerçekten çok iyi. – Benjiman

3

Onay kutusu için tabloya kadar yayılmasını durdurmak için fare kapanı olmasını ister misiniz?

Eğer öyleyse, bunu yapmalıdır.

$('.myCheckbox').mouseover(function(e) { 
    $('.myHelpMenu').html("this is my checkbox help"); 
    e.stopPropagation(); 
}); 
+0

Bu harika çalışıyor! – silvster27

+0

Sevindim Yardımcı olabilirim. Cevabınızı, sorunun cevabını çözmeye yardım ederse, kabul edilen bir cevabı işaretlemeyi unutmayın. :) Tatlı "Canlı Demo" düğmesi için – Mercurybullet

İlgili konular