2012-06-01 35 views
3

这有点难以解释,所以我在这里设置了一个简化的测试用例:http://jsfiddle.net/5Z6h6/1/。基本上发生了什么是我将jQuery UI的.draggable传递给iFrame的内容,并使用jQuery UI的内置iframeFix来避免iFrame捕获鼠标事件的问题。点击并拖动不能在Firefox中使用jQuery UI iframeFix

这个效果很好,除了在Firefox中,点击和拖动不再起作用;相反,您必须单击,释放,然后拖动,然后再次单击放置。这是预期的行为?有没有解决的办法?

任何帮助,非常感谢。

回答

0

神奇的是在鼠标按下开始轻弹关闭的iframe:

$iframe.css('display', 'none'); 

然后设置拖动和触发事件:

$draggable.trigger(event); 

然后再次显示IFRAME:

$iframe.css('display', 'block'); 

该功能应该运行得足够快,所以你不应该看到任何闪烁 - 带我试验和错误找到是,但这就解决了我在Firefox中的iframe问题。

0

升级您的Firefox版本并再次检查。

+0

感谢您的回复,但我使用FF 13,并在Mac OS X和Win 7上的FF 12,11和10中也确认了相同的结果。 – Odisant

0

这花了我很长时间才弄清楚,这里发布的解决方案没有起作用,它似乎仍然是jQuery中的一个问题。

问题是,在Firefox中,似乎mousedown,mouseup和mousemove事件不会从iframe到母文档起泡。

我使用的解决方法是这样的:

// From parent document 
// Get iframe 'document' 
var $iframe = $('iframe').$el.content(); 

// Then bind listeners for events, and trigger them on parent document 
$iframe.on({ 
    mousemove: function(e){ 
     $(document).trigger(e); 
    }, 
    mousedown: function (e) { 
     $(document).trigger(e); 
    }, 
    mouseup: function (e) { 
     $(document).trigger(e); 
    } 
}); 

希望这可以节省的人一些时间。

相关问题