2011-05-14 107 views
0

我用jQuery識別項目時遇到了一個小問題。讓我更好地解釋:)識別jQuery UI對象的問題

我有一個菜單,當用戶點擊一個按鈕時出現。這是完美的。然後,當用戶點擊菜單上除網站以外的任何部分時,我希望此菜單消失。這也很好,但有一個小問題:在菜單中,有一個項目允許用戶從自動完成列表中進行選擇。這個列表是使用jquery-ui自動完成完成的。當用戶在這裏點擊一個項目時,菜單消失(它不應該:)),並且我不知道如何爲此做出例外,因爲我不知道該如何獲取該項目,我可以通過課堂抓住它?它有一個ID嗎?

我有以下代碼來確定點擊的完成和繼續(您可以看到,如果菜單按鈕或菜單被點擊,菜單不會隱藏)。如何在jQuery-ui的自動完成中進行點擊時發生異常?

$(document).click(function(event) { 
    if($(event.target).parents().index($('#menu')) == -1 && $(event.target).parents().index($('#menu-button')) == -1) { 
     if($('#menu').is(":visible")) { 
      $('#menu').hide(500); 
     } 
    } 
}); 

謝謝!

+0

你能發表一些代碼嗎? – Avitus 2011-05-14 02:10:47

+0

張貼... :) :) – luqita 2011-05-14 02:17:23

回答

0

自動完成ul有一類ui-autocomplete。所以你可以通過$(".ui-autocomplete")來得到它。

但是,我做什麼你正在嘗試做的是做這個首選方法:

$(".ui-autocomplete").click(function(e){ 
    e.stopPropagation(); 
    //... and maybe some other stuff 
} 

這基本上將停止冒泡的點擊,所以不會觸發文件點擊。

+0

不工作:(:( – luqita 2011-05-14 02:51:36

+0

適合我:http://jsfiddle.net/Mk2Zf/和更好的:http://jsfiddle.net/Mk2Zf/1/ – 2011-05-14 03:06:12

+0

好吧,它得到了解決方案:)謝謝!! – luqita 2011-05-14 03:09:56

0

你可以在他們的課堂上拿起那些物品。 我想我會改變它是:

$(document).click(function(event) { 
     if($(event.target).parents().index($('#menu')) == -1 && 
       $(event.target).parents().index($('#menu-button')) == -1 && 
       $(event.target).parents().index($('.ui-autocomplete-input')) == -1 && 
       $(event.target).parents().index($('.ui-autocomplete')) == -1) { 
      if($('#menu').is(":visible")) { 
       $('#menu').hide(500); 
      } 
     } 
    }); 
+0

謝謝,但這是行不通的...我應該使用event.target ...等一類的? – luqita 2011-05-14 02:55:03

+0

其實它的工作,但現在的菜單不關閉了:) – luqita 2011-05-14 02:57:21

+0

弄糊塗了,對不起,這也不管用,點擊自動完成元素時菜單仍然消失。 – luqita 2011-05-14 03:06:25