我有两个输入字段。我想强调关注#area无论用户点击哪里,除非它在#input上。我尝试过类似的东西,但由于输入是文档的一部分,它不起作用。
$("#area").focus();
$(document).click(function() { $("#area").focus() };
$("#input").click(function() { $("#input").focus() };
思想?
答案 0 :(得分:12)
将其更改为
$("#area").focus();
$(document).click(function() { $("#area").focus() });
$("#input").click(function(e) { e.stopPropagation(); $("#input").focus() });
这将阻止事件冒泡到文档,并且只会被#input
答案 1 :(得分:2)
stopPropogation
解决方案比我建议的解决方案简单,但是可能值得讨论这个其他选项。在你得到的第一个函数中,你可能会尝试将第一个参数传递给函数,这是一个jQuery规范化的事件对象:
$(document).click(function(event) { ...
并测试它以查看事件的target
属性是否是您的输入:
$(document).click(function(event) {
if(! (event.target == $("#input").get(0)) )
$("#area").focus();
}
答案 2 :(得分:1)
您需要在点击正常输入时取消事件冒泡,方法是在事件处理程序中返回false,或者调用e.stopPropagation()
。
我不确定您分配事件处理程序的顺序是否重要,但您可能会尝试将#input
事件放在首位。