Javascript菜单OnBlur问题

时间:2009-07-28 19:09:37

标签: asp.net javascript jquery ajax jquery-plugins

因此,我正在创建一个javascript菜单,并尝试在用户点击菜单外的某些内容时实现onblur事件,以便它能够进行collaspe。

为了实现这一点,我只是将一个事件附加到窗口并查找任何点击,如果它或它的父元素不符合某个标准,那么我会关闭菜单。

这可以正常工作,直到我有一个iframe并且用户在iframe内部点击。我尝试将事件附加到此,似乎没有任何工作。此外,我看起来更多,如果我附加了一个click事件,iframe的主体可能会创建一个跨域脚本vulernability。有没有人有任何想法?

2 个答案:

答案 0 :(得分:1)

我不确定您为什么要点击鼠标。 对我来说似乎有些倒退。 您应该考虑只为菜单使用onmouseoutonmouseover事件。

这是一个简单的例子:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>Menu Test</title>
</head>

<body>
         <script type="text/javascript">
            function displayMenu(menuListBlockID, menuTextBlockID) {
                var menuTextBlock = document.getElementById(menuTextBlockID)
                menuTextBlock.style.backgroundColor = "green";
                var menuListBlock = document.getElementById(menuListBlockID);
                menuListBlock.style.display = "block";
            }
            function hideMenu(menuListBlockID, menuTextBlockID) {
                var menuTextBlock = document.getElementById(menuTextBlockID)
                menuTextBlock.style.backgroundColor = "#C00000";
                var menuListBlock = document.getElementById(menuListBlockID);               
                menuListBlock.style.display = "none";
            }
        </script>

        <div id="menu">
            <div id="firstMenuItem" onmouseover="displayMenu('firstMenuItemList','firstMenuItemText')" onmouseout="hideMenu('firstMenuItemList','firstMenuItemText')" style="float:left">
                <span id="firstMenuItemText" style="display:block; background-color:#C00000; color:#FFFFFF;" >Menu Item 1 |</span>
                <div id="firstMenuItemList" style="display:none;color:White; border:solid 1px green; padding:2px;">
                    <a href="Test.Html">One</a><br />
                    <a href="Test.Html">Two</a>
                </div>
            </div>
            <div id="secondMenuItem" onmouseover="displayMenu('secondMenuItemList','secondMenuItemText')" onmouseout="hideMenu('secondMenuItemList','secondMenuItemText')" style="float:left">
                <span id="secondMenuItemText" style="display:block; background-color:#C00000; color:#FFFFFF;">Menu Item 2</span>
                <div id="secondMenuItemList" style="display:none;color:White; border:solid 1px green;">
                    <a href="Test.Html">Three</a><br />
                    <a href="Test.Html">Four</a>
                </div>
            </div>
        </div>
    </div>

</body>

</html>

请注意我如何对菜单项进行分组。我有一个主菜单DIV将所有菜单项组合在一起。每个菜单项都有自己的DIV,可以将项目的标题和实际的菜单链接组合在一起。 onmouseover和onmouseout事件将应用于菜单项块。这意味着每当最终用户悬停在菜单项块内的任何内容时,它将保持打开状态。

答案 1 :(得分:0)

不确定,但您可以将onblur附加到窗口对象,并且应该捕获文档外部的任何点击,例如iframe甚至是浏览器外部。你只需要使用它就可以在onclick旁边正常运行。