2017-04-24 42 views
5

我正在尝试查找iframe中的焦点项目,但是失败!在iframe中查找焦点项目

每当我插入iframe的项目似乎是集中,例如,如果我插入一个表,然后光标总是在最后一个单元格。

作为我的测试我试图改变细胞的背景颜色,看看它是否工作,但这总是变化的iframe身体不要的项目插入

var d1 = $.Deferred(); 

$.when(d1).then(function() {     
    var $iframe = $("#ifr").contents(); 
    var focused = $iframe.find(':focus'); 
    focused.css("background", "red"); 
    console.log(focused); 
}) 

d1.resolve(insertTable(html)); 

d1只是一个通话函数使用execCommand()插入到iframe中。

是否有可能找到焦点元素并将其存储在此方法中?

+0

因为没有元件,其重点(除了自身的iFrame)当一个iframe负载。首先你需要制作一些元素来关注,然后才能获得这些元素。 –

+0

插入表格时,光标在其中一个单元格内处于活动状态,因此必须注意或激活某些内容?还有表格调整大小处理程序处于活动状态 – JQuery

+0

您可以添加小提琴示例以查看您面临的问题 –

回答

2

The body element is the fallback if no other element has focus

可能没有元素聚焦;如果没有元素被聚焦,则文档接收到的关键事件必须针对主体元素(如果有的话),[...]用户代理可能仅支持每个顶级浏览上下文中的一个关注元素 - 用户代理在这方面应遵循平台惯例。

另请参阅the CSS :focus selector。你的问题是,整个浏览上下文中只有一个元素可以有焦点。如果焦点不在iframe之内,则它位于其他位置,并且iframe的元素是该回退。

https://www.w3.org/TR/html5/browsers.html#nested-browsing-context表示iframe s是嵌套浏览上下文,而不是顶级浏览上下文。所以似乎好像整个页面只有一个焦点元素。如果这不在iframe之内,则返回其body

0

将此脚本放入您的iframe页面中。

$("body").delegate("*", "focus blur", function() { 
    var elem = $(this); 
    setTimeout(function() { 
    elem.toggleClass("focused", elem.is(":focus")); 
    }, 0); 
}); 

样品的iframe页面 -

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <style> 
     .focused {background: #F00;} 
    </style> 
    <script src="https://code.jquery.com/jquery-1.10.2.js"></script> 
</head> 
<body> 
<form action="#"> 
    First name:<br><input type="text" name="firstname" value="Mickey" > 
    <br> 
    Last name:<br><input type="text" name="lastname" value="Mouse"> 
    <br><br><input type="submit" value="Submit"> 
</form> 

<script> 
$("body").delegate("*", "focus blur", function() { 
    var elem = $(this); 
    setTimeout(function() { 
    elem.toggleClass("focused", elem.is(":focus")); 
    }, 0); 
}); 
</script> 
</body> 
</html>