2017-04-24 84 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>