小提琴:http: //jsfiddle.net/4PMwP/
我正在为导航栏使用以下脚本:
(function($){
var timeout = 500;
var closetimer = 0;
var ddmenuitem = null;
// From https://github.com/Modernizr/Modernizr/blob/master/modernizr.js
var isTouch = ('ontouchstart' in window) ||
window.DocumentTouch && document instanceof DocumentTouch;
// jsddm funcs from http://javascript-array.com/scripts/jquery_simple_drop_down_menu/
function jsddm_open($this){
jsddm_canceltimer();
jsddm_close();
ddmenuitem = $this.find('ul').css('visibility', 'visible');
}
function jsddm_close() {
if(ddmenuitem){
ddmenuitem.css('visibility', 'hidden');
ddmenuitem = null;
}
}
function jsddm_timer() {
closetimer = window.setTimeout(jsddm_close, timeout);
}
function jsddm_canceltimer() {
if(closetimer)
{ window.clearTimeout(closetimer);
closetimer = null;
}
}
function jsddm_toggle($this) {
if (ddmenuitem && $this.has(ddmenuitem[0]).length){
jsddm_close();
}
else {
jsddm_open($this);
}
}
$.fn.make_dropdown = function(options){
return this.each(function(){
if (options && options['timeout']){
timeout = options['timeout'];
}
$(this).click(function(event){
jsddm_toggle($(this));
event.stopPropagation();
});
if (!isTouch){
$(this).mouseover(function(){ jsddm_open($(this)) }).mouseout(jsddm_timer);
}
});
}
$(document).click(jsddm_close);
})(jQuery);
悬停或单击时会显示下拉菜单,这对于桌面和移动浏览器非常有用。问题是我的下拉菜单将包括用于搜索、登录等的输入框,单击这些不应关闭下拉菜单。由于下拉列表中的所有内容都是监听点击的 li 的孩子,因此无论如何都会关闭。
当单击子元素时,我需要下拉菜单保持可见,但在单击主父 li 时仍会切换。
谢谢