一个事件处理程序覆盖第二个事件处理程序
One event handler overrides second event handler
这是一个PHP字符串,显示出来:
$('.$name input').on( 'blur', function(e){
$('span.$name div ul').on('click', 'li', function(ev){
var value = $(this).attr('value');
var html = $(this).html();
console.log(value);
$('span.$name select').val( value );
$('span.$name input').val( html );
$('span.$name div').hide();
});
});
我有一个处理程序,当它的输入失去焦点,点击列表项它做一些事情,隐藏div,但我想隐藏当输入失去焦点,它没有点击列表元素
如果我尝试这样做:
$('.$name input').on( 'blur', function(e){
$('span.$name div ul').on('click', 'li', function(ev){
var value = $(this).attr('value');
var html = $(this).html();
console.log(value);
$('span.$name select').val( value );
$('span.$name input').val( html );
});
$('span.$name div').hide();
});
它只是关闭div和click
事件处理程序根本不起作用。没有错误,没有。
这个不行:
$('.$name input').on('blur',
function (e) {
$('span.$name div').hide();
});
$('span.$name div ul').on('click', 'li', function (ev) {
var value = $(this).attr('value');
var html = $(this).html();console.log(value);
$('span.$name select').val(value);
$('span.$name input').val(html);
});
我如何解决我的问题?
编辑:
演示:http://jsfiddle.net/e2dw18z0/
我想我明白你是怎么陷入这个问题的了。当你离开输入并点击div时,输入的悬停事件在点击注册到div上之前关闭了div。所以一个非常快速的修复方法是:
$('.test_name input').on( 'blur', function(e){
window.setTimeout(function() {
$('span.test_name div').hide();
}, 100);
});
如下所示:
http://jsfiddle.net/sifriday/e2dw18z0/1/超时确保有时间为div点击注册,如果它即将到来。如果没有,没有问题,无论哪种方式,弹出框都会按预期关闭。正如adeneo上面所评论的那样,这也整理了嵌套的事件代码。
一种更简洁的方法是在文档上点击来关闭弹出窗口,但只有当弹出窗口是可见的并且输入没有焦点时:
$(document).on( 'click', function(e){
if (
$('span.test_name div').is(":visible") &&
!($('span.test_name input').is(':focus'))
) $('span.test_name div').hide()
});
如下所示:
http://jsfiddle.net/sifriday/e2dw18z0/3/相关文章:
- keyup事件处理程序更改焦点不适用于快速键入
- 提示使用服务器端事件处理程序激活JavaScript
- 将事件处理程序绑定到任何可能的事件
- 正在将事件处理程序添加到不存在的类
- 在循环中附加事件处理程序时出现浏览器性能问题
- 在同一个javascript事件处理程序中调用不同的函数
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 检查事件处理程序参数
- 实现延迟的jquery更改事件处理程序
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- 如何使jQuery的“bind”或“on”事件处理程序幂等
- 带有参数的Javascript事件处理程序
- Jquery事件处理程序仅适用于匿名函数
- 如何从另一个处理程序内部取消JavaScript事件处理程序函数的执行
- 如何在jQuery事件处理程序中存储和重用超时
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- 异步处理所有事件处理程序的方法
- jsplumb中的Click事件处理程序丢失“;这个“;对象
- 构造函数中的事件处理程序与构造函数外的事件处理函数的行为不同
- 如何在事件处理程序的回调中防止Default