在Child上调用Parent控件的事件

时间:2010-03-01 09:39:18

标签: html

我有一个场景,我有一个容器控件(基本上是一个ASP.Net用户控件),它有几个子控件。我希望控件共同确定丢失的焦点事件。例如,我希望父控件告诉我它只有当任何一个子控件获得焦点时才有焦点,它应该告诉我,如果所有子控件都失去了焦点,它就会失去焦点。

作为模拟参考下面的代码。如果您运行此示例,您会注意到当您单击蓝色矩形时,它会显示蓝色聚焦,然后如果您单击红色,则会显示蓝色模糊,红色聚焦。我需要的是当我点击它们中的任何一个时,它应该告诉我Red Focused,当我点击外面它应该点击Red Blur。

有人可以帮助我吗?

由于

<head runat="server">
<title>Untitled Page</title>

  <script type="text/javascript" language="javascript">
    function RedFocus()   { alert('RedFocus');   }
    function BlueFocus()  { alert('BlueFocus');  }
    function GreenFocus() { alert('GreenFocus'); }
    function RedBlur()    { alert('RedBlur');    }
    function BlueBlur()   { alert('BlueBlur');   }
    function GreenBlur()  { alert('GreenBlur');  }
  </script>
</head>
<body>
<div onblur="RedBlur()" onfocus="RedFocus()"
  style="background-color: Red; width: 400px; height: 400px;">
  <div onblur="BlueBlur()" onfocus="BlueFocus()"
    style="background-color: Blue; width: 200px; height: 200px; margin: 50px">
    <div onblur="GreenBlur()" onfocus="GreenFocus()"
      style="background-color: Green; width: 100px; height: 100px; margin: 25px">
    </div>
  </div>
</div>
</body>
</html>

1 个答案:

答案 0 :(得分:2)

由于事件不是您喜欢的顺序,为什么不使用简单的计时器和全局变量?

parentfocus;
function greenBlur()
{
    parentfocus = setTimeout(parentHasBlured,50);
}
function blueFocus()
{
    clearTimeout(parentfocus);
}

function parentHasBlured()
{
    //Logic here
}

由于事件如此紧密,50ms的延迟应该足以完成这个伎俩(不太可能做到这一点)