我想检测用户在输入文本框外点击时的事件,而不是在内部点击时的事件。
以下是我的代码,但无论是在内部点击(聚焦)还是在外部点击,都会触发两个事件:
<input id="title" val="hello" />
$("#title").focusout(function() {
console.log('inside');
}).blur(function() {
console.log('outside');
});
我想检测用户在输入文本框外点击时的事件,而不是在内部点击时的事件。
以下是我的代码,但无论是在内部点击(聚焦)还是在外部点击,都会触发两个事件:
<input id="title" val="hello" />
$("#title").focusout(function() {
console.log('inside');
}).blur(function() {
console.log('outside');
});
你可以像这样绑定你的focus
和blur
事件:
<input id="title" val="hello" type="text" />
$("#title").focus(function() {
console.log('in');
}).blur(function() {
console.log('out');
});
focusout
不是必需的,因为它是针对子元素的事件冒泡而设计的:http://api.jquery.com/focusout/
您可以编写一个小插件,例如:
(function($){
$.fn.outside = function(ename, cb){
return this.each(function(){
var $this = $(this),
self = this;
$(document).bind(ename, function tempo(e){
if(e.target !== self && !$.contains(self, e.target)){
cb.apply(self, [e]);
if(!self.parentNode) $(document.body).unbind(ename, tempo);
}
});
});
};
}(jQuery));
..并像这样使用:
$('#title').outside('click', function(e) {
console.log('outside');
});
看起来当你点击文本框之外的区域时,focusout()
和 blur()
都会被触发。尝试使用 focus()
代替它们。在这里查看 示例。
我不确定这是否是您想要的,但我尝试着给出了一个方案:
<html>
<head>
<title>Example</title>
<script src="jquery-1.4.3.js" type="text/javascript"></script>
</head>
<body id="body">
<script>
$("document").ready( function()
{ $("#body").click( function()
{ alert("body"); } );
$("#input").click( function(event)
{ alert("input"); event.stopPropagation(); } );
} );
</script>
<h2>input below</h2>
<input id="input" type="text"/>
</body>
</html>
focusout
和blur
会触发吗? - user113716$(el).focusout().blur()
不是一个好主意...但我喜欢在元素外点击的概念! - Derek Adair