我有这个函数:
$('input#auto_results').bind('blur', function(e) {
$('.result').bind('click', function() {
return;
});
$('#results_container').hide();
}); 基本上,我希望#results_container隐藏在模糊上,除非单击了类为.result的元素。
上面的函数不起作用
发布于 2011-06-17 20:54:57
你的代码有问题:
您要做的是在.result上的另一个事件(blur)的事件处理程序中附加一个click事件处理程序。
除了附加这个基本上什么也不做的click处理程序之外,您的代码将不会做任何事情。
简单选项:
将首先触发blur事件,然后触发.results上的click,因此这不是一个简单的情况。
你能做到的最简单的方法是:
$('input#auto_results').blur(function () {
$('#results_container').hide();
});
$('.result').click(function () {
$('#results_container').show();
});jsFiddle Demo
所以只需隐藏容器,单击一下,再次显示它。会导致一个小小的眨眼。
超时选项:
我能想到的另一个选择是,当blur被触发时,设置一个较小的超时,然后在.results的单击事件上,取消它。在本例中,我使用.data()函数将超时存储在body上,您可以将其存储在更符合逻辑的元素上,这只是一个演示:
$('input#auto_results').blur(function () {
var cucc=setTimeout(function () {
$('#results_container').hide();
$('body').removeData('blurTimeout');
}, 100);
$('body').data('blurTimeout', cucc);
});
$('.result').click(function () {
var cucc=$('body').data('blurTimeout');
if (typeof cucc != 'undefined') {
clearTimeout(cucc);
}
});jsFiddle Demo
https://stackoverflow.com/questions/6384691
复制相似问题