2010-12-09 68 views
2

因此,它是一種很難用一個句子,但這裏是一個簡單的例子:如何在jQuery中使用不同的點擊監聽器時忽略一個模糊監聽器?

<html> 
    <head> 
     <title>Example</title> 
     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
     <script type="text/javascript"> 
     <!-- 
      $(document).ready(function() { 
       $("#input").focus(function() { 
        $("#p").show(); 
       }).blur(function() { 
        $("#p").hide(); 
       }); 
       $("#p").click(function() { 
        alert("Thanks for clicking me"); 
       }); 
      }); 
     --> 
     </script> 

    </head> 
    <body> 
     <input type="text" id="input" /> 
     <p id="p" style="background:red;display:none""> 
      Click me. 
     </p> 
    </body> 
</html> 

基本上當你專注於一個輸入一個段落出現,當焦點模糊的段落消失。但是,在段落上也有一個點擊監聽器,所以當你點擊它時出現一個警告消息框。問題是,當我將輸入框的段落顯示爲[預期]時,但是當我點擊該段落時,輸入框的模糊首先被註冊,因此段落在瀏覽器檢測到我點擊它之前被隱藏。

回答

2

嘗試Ben Alman's jQuery Outside events plugin

那麼你的代碼將是:

$(document).ready(function() { 
    $("#input").focus(function() { 
     $("#p").show(); 
    }).bind('focusoutside', function(event) { 
     if (!$(event.target).is('#p')) { 
      $("#p").hide(); 
     } 
    }); 
    $("#p").click(function() { 
     alert("Thanks for clicking me"); 
     // Do this if you need to hide #p after doing 
     // whatever click on p really does. 
     $(this).hide(); 
    }); 
}); 

通過使用focusoutside事件會同時捕獲點擊和#input Tab鍵程,讓您可以根據其中的焦點就需要決定去做。

例子:http://jsfiddle.net/petersendidit/WSEWh/2/

+0

不要你需要的$( 「#P」),隱藏()在點擊功能即可。? – mikesir87 2010-12-09 13:44:55