2011-11-01 60 views
0

有人可以向我解釋這個嗎?我試圖理解爲什麼在li標籤內下拉列表工作正常,但是當使用表單時,菜單在任何地方點擊都會消失。Jquery:請幫忙解釋這段代碼,因爲我需要調整它

menu.find('ul li > a').bind('click', function (event) { 
    event.stopPropagation(); 
} 

它的工作原理在組合有:

$("html").click(function() { 
    menu.find('.active').removeClass('active'); 
}); 

全部代碼菜單例如:

http://jsfiddle.net/e4yy4/

回答

0

這段代碼

$("html").click(function() { 
    menu.find('.active').removeClass('active'); 
}); 

將刪除該菜單的active類等以往檢測的任何位置上點擊時隱藏這一頁。在下拉列表中檢測到點擊時

menu.find('ul li > a').bind('click', function (event) { 
    event.stopPropagation();}); 

會覆蓋第一段代碼。

因此,您可以添加下面的代碼來覆蓋第一段代碼,以便在單擊窗體時也取消隱藏。

menu.find('ul > form').bind('click', function (event) { 
    event.stopPropagation();}); 

就這樣 http://jsfiddle.net/Quincy/e4yy4/3/

0

您也想停下來form事件傳播到html(也許應該是document )。

更改選擇器以選擇後代form元素。

jsFiddle

+0

您好,感謝您的幫助,你能對你的意思由大概應該是文件詳細點嗎?如果把這種形式和你喜歡的形式結合起來,將昆西分裂出來就像昆西所做的那樣,會有什麼不同呢?謝謝 –

+0

@ trying_hal9000:我通常讓事件傳播到'document',而不是'html'元素,儘管在你的例子中它可能沒有關係。將它們分開不會有什麼區別,只需讓代碼更加冗長並且違反DRY。 – alex

0

如果您將第一個檢查更改爲menu.find('ul li>*'),那麼它似乎工作。 我認爲這行只處理點擊鏈接,而你的表單元素不是鏈接。

0

<form>與其他任何元素一樣,它應該有資格使用CSS選擇器(由find()函數調用)進行選擇。

你需要改變你的選擇,以包括<form>標籤和選擇可能改變皮卡上<input>元素,而不是<a>

有關jQuery選擇的更多信息,請訪問:http://api.jquery.com/category/selectors/