我想实现捕获嵌入在里面的框架“aa”的单击事件,但是不能捕获,i不会自动加1。
但我若把捕获点击事件给“bb”,事件能成功,i会自动加1。
请大家帮忙看看是哪的问题!在此多谢了!
<html>
<head></head>
<body>
<font id="bb">红色</font>
<iframe id="aa" src="temp1.jsp"></iframe><script language="javascript">
i=0;
function scall()
{
i=i+1;
}
var btn1Obj = document.getElementById("aa"); 
if (btn1Obj.addEventListener){
    btn1Obj.addEventListener("click",scall,false); 
} else if (btn1Obj.attachEvent){
    btn1Obj.attachEvent("onclick",scall);
}
</script>
<font onclick="alert(i);">查看计数</font>
</body>
</html>

解决方案 »

  1.   

    iframe是没有onclick事件的 但iframe内的window的document元素是有onclick事件的
    所以说你将语句绑定在aa的onclick语句柄上是没有效果的
      

  2.   

    LZ的代码中的几个问题
    1. 对于初始化的JS代码 应该使用onload事件加载 因为你的JS在页面元素未完全读取完毕就执行。2.在一个页面含有某个iframe,其id="myframe" name="myframe",此时使用document.getelementbyid("myframe")取到的是iframe标签对象,通过该对象可以获取iframe的各个属性,例如src、frameborder、style等等,但是不能获取到iframe所包含的子页面的各个对象。如果使用document.frames("myframe")取到的是iframe组件对象,通过该对象可以获取到iframe所包含的页面的子页面的各个对象修改完的代码如下
    <html>
    <head> 
    <script   language=javascript>
    i=0;
    function   scall()
    {
    i=i+1;
    }
    function init()
    {
    var   btn1Obj   =   document.frames("aa").document;  
    if   (btn1Obj.addEventListener){
            btn1Obj.addEventListener( "click",scall,false);  
    }   else   if   (btn1Obj.attachEvent){
            btn1Obj.attachEvent( "onclick",scall);
    }
    }
    </script>
    </head>
    <body onload = init();>
    <font   id= "bb"> 红色 </font>
    <iframe   id= "aa"   src= "temp1.jsp"> </iframe>
    <font   onclick= "alert(i)"> 查看计数 </font>
    </body>
    </html>
      

  3.   

    LZ的代码主要有2个问题1.JS初始化代码 应该避免放在BODY中。对于这些操作我们最好是在body中定义onload操作,然后在该操作中去完成这些任务,尽量避免在html中嵌入script执行代码,因为对于比较大的页面,当这些脚本执行的时候,页面往往还没有加载完毕,因此许多页面对象还没有被生成,此时动态去改变很可能会报异常。2.在一个页面含有某个iframe,其id="myframe" name="myframe",此时使用document.getelementbyid("myframe")取到的是iframe标签对象,通过该对象可以获取iframe的各个属性,例如src、frameborder、style等等,但是不能获取到iframe所包含的子页面的各个对象。如果使用document.frames("myframe")取到的是iframe组件对象,通过该对象可以获取到iframe所包含的页面的子页面的各个对象。
    一个是标签对象 一个是iframe内嵌的对象 这是2个不同对象。修改完的代码
    <html>
    <head> 
    <script   language=javascript>
    i=0;
    function   scall()
    {
    i=i+1;
    }
    function init()
    {
    var   btn1Obj   =   document.frames("aa").document;  
    if   (btn1Obj.addEventListener){
            btn1Obj.addEventListener( "click",scall,false);  
    }   else   if   (btn1Obj.attachEvent){
            btn1Obj.attachEvent( "onclick",scall);
    }
    }
    </script>
    </head>
    <body onload = init();>
    <font   id= "bb"> 红色 </font>
    <iframe   id= "aa"   src= "temp1.jsp"> </iframe>
    <font   onclick= "alert(i)"> 查看计数 </font>
    </body>
    </html>
      

  4.   

    LZ的代码主要有2个问题1.JS初始化代码 应该避免放在BODY中。对于这些操作我们最好是在body中定义onload操作,然后在该操作中去完成这些任务,尽量避免在html中嵌入script执行代码,因为对于比较大的页面,当这些脚本执行的时候,页面往往还没有加载完毕,因此许多页面对象还没有被生成,此时动态去改变很可能会报异常。2.在一个页面含有某个iframe,其id="myframe" name="myframe",此时使用document.getelementbyid("myframe")取到的是iframe标签对象,通过该对象可以获取iframe的各个属性,例如src、frameborder、style等等,但是不能获取到iframe所包含的子页面的各个对象。如果使用document.frames("myframe")取到的是iframe组件对象,通过该对象可以获取到iframe所包含的页面的子页面的各个对象。
    一个是标签对象 一个是iframe内嵌的对象 这是2个不同对象。修改完的代码
    <html>
    <head> 
    <script   language=javascript>
    i=0;
    function   scall()
    {
    i=i+1;
    }
    function init()
    {
    var   btn1Obj   =   document.frames("aa").document;  
    if   (btn1Obj.addEventListener){
            btn1Obj.addEventListener( "click",scall,false);  
    }   else   if   (btn1Obj.attachEvent){
            btn1Obj.attachEvent( "onclick",scall);
    }
    }
    </script>
    </head>
    <body onload = init();>
    <font   id= "bb"> 红色 </font>
    <iframe   id= "aa"   src= "temp1.jsp"> </iframe>
    <font   onclick= "alert(i)"> 查看计数 </font>
    </body>
    </html>
      

  5.   

    哎,现在的人啊,动不动就说是BUG
      

  6.   

    对了还得要请教一下若代码改成下面这样,为何又不能触发事件呢?
    <html> 
    <head>
    <script language= "javascript "> 
    function scall() 

      alert(frames.length);

    function init()
    {
    var btn1Obj = document.frames("aa").document;   
    if (btn1Obj.addEventListener){ 
      btn1Obj.addEventListener("click",scall,false);   
    } else if (btn1Obj.attachEvent){ 
      btn1Obj.attachEvent("onclick",scall); 
    }
    }
    </script> 
    </head> 
    <body onload="init()"> 
    <script>
    document.write('<iframe name="aa" src="temp1.jsp"></iframe>');
    </script>
    </body> 
    </html> 
      

  7.   

    结贴了,但是我在“管理贴子”里给分时,为何会提示“密码验证有误 Error Password 1”呢?我都正常登录,能管理贴子了,咋还会有这提示。
    请管理员查一下。