在鼠标hover时显示/隐藏jQuery对话框

我正在尝试在图像上创建鼠标hover地图区域,当鼠标结束时必须显示一个对话框。 对话框内容不同,具体取决于它所在的区域。

我的脚本实际上总是显示所有对话框。

这是我创建的jsFiddle: http : //jsfiddle.net/U6JGn/4/

和javascript:

$(function() { $('#box').dialog( { modal:true, resizable:false } ).parent().find('.ui-dialog-titlebar-close').hide(); for (var i = 0; i < 2; i++) { $( "#elem"+i ).mouseover(function() { $( ".box"+i ).dialog( "open" ); }); $( "#elem"+i ).mouseout(function() { $( ".box"+i ).dialog( "close" ); }); } }); 

我究竟做错了什么 ?

将框对话框分配给变量,然后不要将更多的jquery事件排入队列,因为它会破坏您的代码。

由于Ids需要始终是唯一的,我们需要在你的html和css中做一些改变

ids:#box0,#box1

class:.box

 $(function() { $('.box').each(function(k,v){ // Go through all Divs with .box class var box = $(this).dialog({ modal:true, resizable:false,autoOpen: false }); $(this).parent().find('.ui-dialog-titlebar-close').hide(); $( "#elem"+k ).mouseover(function() { // k = key from the each loop box.dialog( "open" ); }).mouseout(function() { box.dialog( "close" ); }); }); }); 

工作示例: jsfiddle

试试这个:

 for (var i = 0; i < 2; i++) { (function(i) { $( "#elem"+i ).mouseover(function() { $( ".box"+i ).dialog( "open" ); }); $( "#elem"+i ).mouseout(function() { $( ".box"+i ).dialog( "close" ); }); })(i); } 

更新:

看看演示

http://jsfiddle.net/U6JGn/129/

修改了JQuery代码….

 $(document).ready(function() { for (var i = 0; i<= 1; i++) { $( "#elem"+i ).on('mouseenter',function() { var st = $(this).attr('Id').replace('elem',''); $( ".box" + st).css('display',''); }); $( "#elem"+i ).on('mouseout',function() { var st = $(this).attr('Id').replace('elem',''); $( ".box"+st ).hide(); }); } });