2009-07-28 12 views
2

JavaScriptメニューを作成していて、ユーザがメニュー外の何かをクリックしたときにonblurイベントを実装しようとしているので、それはcollaspeになります。JavascriptメニューOnBlurの問題

これを実装するには、ウィンドウにイベントを添付してクリックを検索し、その要素またはその親要素が特定の基準を満たしていない場合は、メニューを閉じます。

これはiframeがあり、ユーザーがiframeをクリックするまでうまく動作します。私はこれにイベントを付けることを試みたが、何も動作していないようだ。さらに、私はさらに多くのことを見て、クリックイベントを添付してiframeの本体を作成すると、クロスドメインスクリプティングの可能性が生じる可能性があります。誰にもアイデアはありますか?

+0

メニューをどのようにぼかしますか?入力要素だけがフォーカスを受け取ります... –

答えて

0

あなたはウィンドウオブジェクトにonblurを付けることができるかもしれません。iframeやブラウザの外など、ドキュメントの外にあるクリックを捕捉する必要があります。あなたは、onclickの側面に沿って適切に機能するために、それだけで作業しなければなりません。

+0

クリックイベントのウィンドウがありません.. –

1

マウスクリックを探している理由がわかりません。 それは私に少し後であるようです。 メニューの代わりにonmouseoutイベントとonmouseoverイベントを使用するだけで十分です。

<!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イベントは、メニュー項目ブロックに適用されます。これは、エンドユーザーがメニュー項目ブロック内の何かを上書きするたびに、開いたままになることを意味します。

+0

良いオプションかもしれないhaha –

+0

それは私がそれを行う方法です:) それはあなたのために働くことを望みます! – Frinavale

+0

ええ、私はあなたが話していた修正を適用しようとしました。メニューのアンカータグの上にカーソルを置くと、マウスがメニューから移動したと考えられます。 –