强制关注一个具有exception的元素。 (jQuery的)

我有两个输入字段。 我想强调关注#area,无论用户点击的位置, 除非它在#input上。 我尝试过类似的东西,但由于输入是文档的一部分,它不起作用。

$("#area").focus(); $(document).click(function() { $("#area").focus() }; $("#input").click(function() { $("#input").focus() }; 

思考?

改为

 $("#area").focus(); $(document).click(function() { $("#area").focus() }); $("#input").click(function(e) { e.stopPropagation(); $("#input").focus() }); 

这将阻止事件冒泡到文档,并且只会被#input

stopPropogation解决方案比我要建议的更简单,但是可能值得讨论这个其他选项。 在你得到的第一个函数中,你可能会尝试将第一个参数传递给函数,这是一个jQuery规范化的事件对象:

 $(document).click(function(event) { ... 

并测试它以查看事件的target属性是否是您的输入:

 $(document).click(function(event) { if(! (event.target == $("#input").get(0)) ) $("#area").focus(); } 

单击正常输入时,您需要取消事件冒泡,方法是在事件处理程序中返回false,或者调用e.stopPropagation()

我不确定您分配事件处理程序的顺序是否重要,但您可能会尝试将#input事件放在第一位。