2011-11-28 66 views
0

我想爲我的div註冊clickevent。如果我把iframe放在div裏面,它不會工作。如果它在外面,它會起作用。如何在iframe位於div內時使其工作?如何註冊div點擊事件?

HTML:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <style> 
     #mydiv 
     { 
      height: 300px; 
      width: 300px; 
      border: 1px solid; 
     } 
    </style> 
    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> 
    <script> 

     $(function() { 
      var clicks = 0; 
      $('#mydiv').bind('click', function (e) { 
       clicks++; 
       $("#numberclicks").html(clicks); 
      }); 
     }); 

    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <span id="numberclicks"></span> 
     <div id="mydiv"> 
      <iframe id="myframe" src="http://www.jquery.com" width="300" height="300" /> 
     </div> 


    </div> 
    </form> 
</body> 
</html> 

回答

0

iframe是一個完全不同的DOM文檔,這就是爲什麼當你點擊DIV時,瀏覽器實際上是渲染iframe內容的點擊,你可以在iframe上放置一個空div來模仿,會是這樣的:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <style> 
     #mydiv 
     { 
      height: 300px; 
      width: 300px; 
      border: 1px solid; 
     } 

     #clickerDiv 
     { 
      height: 300px; 
      position: absolute; 
      width: 300px; 
     } 
    </style> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
    <script> 

     $(function() { 
      var clicks = 0; 
      $('#mydiv').bind('click', function (e) { 
       clicks++; 
       $("#numberclicks").html(clicks); 
      }); 
     }); 

    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <span id="numberclicks">0</span> 
     <div id="mydiv"> 
      <div id="clickerDiv"></div> 
      <iframe id="myframe" src="http://www.jquery.com" width="300" height="300" /> 
     </div> 
    </div> 
    </form> 
</body> 
</html> 

您可以將點擊事件鏈接到幻影div,甚至鏈接到主div容器!

+0

確定它計數點擊,但iframe中的所有鏈接現在不起作用嗎?我想both! – Pindakaas

+0

對不起,你不能擁有這兩件事,或者你應該直接在ifram上閱讀,你有沒有訪問iframe Source? –

2

IFrame所吞嚥的DIV作爲一個跨站腳本的事情點擊事件,你可以做什麼用的z-index和收集被放在一個div在iframe的頂部點擊從上面的div。

+0

嘗試不起作用:( – Pindakaas

0

這是因爲實際的點擊事件來到iframe的內容,這是一個完全不同的文檔。爲了處理這些問題,您必須附加到該文檔的點擊事件。

0

所有的答案都是正確的 - IFRAME創建一個新的窗口對象。您正在連接到父窗口中的「#mydiv」元素,而不是您的IFRAME的窗口。當DIV中發生點擊事件時,它會通過DOM樹「冒泡」。假設事件不是從冒泡中「停止」的,你可以在任何DIV的父元素中捕獲和處理事件。但是,因爲它位於IFRAME中,所以它將停止在文檔級別冒泡,並且不會繼續在父框架中冒泡。

現在,如果IFRAME與父框架位於同一個域中,則可以訪問該文檔的元素並將事件處理程序連接到這些元素。但是,您似乎在跨域違反「同源策略」的工作:http://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_DOM_access

相關問題