micahburnett
asked on
Jquery dynamically add event handlers in a loop.
I want to be able to add mouseover events for multiple divs. The included code line 12 works. Line 13 works to show #mnuHidePanel, however line 13 does not work to add this show event:
$('#'+menuItems[i]).show(1 00).
When I directly add event handlers (the commented out code) it works.
$('#'+menuItems[i]).show(1
When I directly add event handlers (the commented out code) it works.
<script type="text/javascript">
$(document).ready(function(){
var menuItems = new Array();
menuItems[0] = 'mnuHome';
menuItems[1] = 'mnuContent';
menuItems[2] = 'mnuPetition';
menuItems[3] = 'mnuBlog';
menuItems[4] = 'mnuCommunication';
menuItems[5] = 'mnuSecurity';
for(i=0;i<menuItems.length;i++)
{
$('#'+menuItems[i]).css('left', $('#'+menuItems[i]+'Top').position().left+3);
$('#'+menuItems[i]+'Top').mouseover(function(){$('#'+menuItems[i]).show(100); $('#mnuHidePanel').show(100);});
}
$('#mnuHidePanel').hide();
//$('#mnuHomeTop').mouseover(function(){$('#mnuHome').show(100); $('#mnuHidePanel').show(100);});
//$('#mnuContentTop').mouseover(function(){$('#mnuContent').show(100); $('#mnuHidePanel').show(100);});
//$('#mnuPetitionTop').mouseover(function(){$('#mnuPetition').show(100); $('#mnuHidePanel').show(100);});
//$('#mnuBlogTop').mouseover(function(){$('#mnuBlog').show(100); $('#mnuHidePanel').show(100);});
//$('#mnuCommunicationTop').mouseover(function(){$('#mnuCommunication').show(100); $('#mnuHidePanel').show(100);});
//$('#mnuSecurityTop').mouseover(function(){$('#mnuSecurity').show(100); $('#mnuHidePanel').show(100);});
$('#mnuHidePanel').mouseover(function(){$('div').filter('.mnuDropDown').hide(100);$('#mnuHidePanel').hide(100);});
});
</script>
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Beautiful, thank you!
I added the line below for each mouseover so the previous menus will all be hidden before the new menu is shown. The only problem is that when going across the menu items, often two or more are left open unless going over the top menu items slowly. Changing .show(100) to .show() also fixes it but I loose the animation. Is this common behavior?
$('div').filter('.mnuDropD own').hide ()
I added the line below for each mouseover so the previous menus will all be hidden before the new menu is shown. The only problem is that when going across the menu items, often two or more are left open unless going over the top menu items slowly. Changing .show(100) to .show() also fixes it but I loose the animation. Is this common behavior?
$('div').filter('.mnuDropD
$(document).ready(function() {
// Loop through each div within the 'menu' div
$("#topMenu div").each(function() {
// Replace 'Top' from the id of the div (i.e. mnuHomeTop becomes mnuHome)
var childMenuID = this.id.replace(/Top$/,"");
$('#'+childMenuID).css('left', $(this).position().left+3);
// Bind onmouseover event to the div
$(this).mouseover(function() {
$('div').filter('.mnuDropDown').hide()
$('#'+childMenuID).show();
$('#mnuHidePanel').show();
});
});
$('#mnuHidePanel').mouseover(function(){$('div').filter('.mnuDropDown').hide();$('#mnuHidePanel').hide()});
});
I guess.
What it does : the element gets displayed with 0 opacity and sets it to full opactity within the specified timeframe. In your case 100 msec.
There's the stop method. Check it out. Maybe you can use it.
http://docs.jquery.com/Effects/stop#clearQueuegotoEnd
What it does : the element gets displayed with 0 opacity and sets it to full opactity within the specified timeframe. In your case 100 msec.
There's the stop method. Check it out. Maybe you can use it.
http://docs.jquery.com/Effects/stop#clearQueuegotoEnd
ASKER