【发布时间】:2012-12-23 19:48:01
【问题描述】:
我需要在我的主机页面的子 iframe 中使用 jQuery UI。我的问题是,如果用户鼠标在子 iframe 之外移动到父 iframe 中,则拖动操作效果不佳。如果发生这种情况,则不再将 mousemove 事件或 mouseup 事件发送到 UI 控件。我已经用我自己的 GUI 函数解决了这个问题,只需让父级将这些事件传递给子级进行处理,但使用 jQuery UI 我不知道如何正确传递这些事件。在下面的示例中,我展示了使用触发器将事件传递给子 iframe 的失败尝试。
有谁知道将这些事件传递给子 iframe 并让 jQuery UI 能够正确处理它们的方法?
这是我的主页:
<!DOCTYPE html>
<html lang="en-us">
<head>
<script src="/SharedLib/jquery-1.8.3.js" type="text/javascript"></script>
<script type="text/javascript">
var MouseMoveCallback;
function OnMouseMove(e) {
if (MouseMoveCallback)
MouseMoveCallback(e);
}
$(document).ready(function () {
$(document).mousemove(OnMouseMove);
});
</script>
</head>
<body>
<p>
If your mouse strays outside of the iframe during a drag of the slide handle
it no longer moves or detects mouseup.
</p>
<iframe src="EventTestChildFrame.html" style="width: 500px; height: 80px;">
</iframe>
</body>
</html>
这是我的孩子 iframe,它丢失了鼠标事件:
<!DOCTYPE html>
<html lang="en-us">
<head>
<link href="/SharedLib/jquery-ui-1.9.2.custom/css/smoothness/jquery-ui-1.9.2.custom.css" rel="stylesheet" />
<script src="/SharedLib/jquery-1.8.3.min.js" type="text/javascript"></script>
<script src="/SharedLib/jquery-ui-1.9.2.custom/js/jquery-ui-1.9.2.custom.js"></script>
<script type="text/javascript">
function OnMouseMove(e) {
// this doesn't work...
$(document).trigger("mousemove", e);
}
$(document).ready(function () {
parent.MouseMoveCallback = OnMouseMove;
$("#slider").slider();
});
</script>
</head>
<body style="background-color: #D0D0D0;">
<p>Child iframe with jQuery UI control.</p>
<div id="slider" style="margin: 8px;"></div>
</body>
</html>
【问题讨论】:
-
糟糕的情况...使用 iframe 很重要吗?
-
复杂的故事但底线是肯定的,使用 jQuery UI 是可选的,但不使用 iframe。如果我不能将事件传递给 jQuery UI,我将不得不制作自己的控件克隆。
标签: jquery events iframe mousemove