无限循环我有这样的代码:对元素焦点
$("body").on("focus", ".input", function() {
$("body").append("loop<br>");
$(this).find("input").focus();
});
小提琴:
http://jsfiddle.net/Hc3D8/
为什么它循环?
无限循环我有这样的代码:对元素焦点
$("body").on("focus", ".input", function() {
$("body").append("loop<br>");
$(this).find("input").focus();
});
小提琴:
http://jsfiddle.net/Hc3D8/
为什么它循环?
它循环,因为你是附加功能的focus
事件,它本身触发focus
事件。
尽管您在内部input
元素上调用focus
事件,但它仍会冒泡到外部元素.input
。
要解决这一点,你可以钩到一个不同的事件外元素:
$("body").on("click", ".input", function() { // click event
$("body").append("loop<br>");
$(this).find("input").focus();
});
或者你可以在停止传播focus
的input
:
$("body")
.on("focus", ".input", function() {
$("body").append("loop<br>");
$(this).find("input").focus();
})
.on('focus', 'input', function(e) {
e.stopPropagation();
});
那么当我关注div时,如何将输入字段集中在.input div中? –
在'.input'元素上使用不同的事件 - 可能是'click'。 –
我需要关注点,因为它必须可以用选项卡来选择...... –
因为您在事件处理程序中再次调用元素.focus()
而触发循环,这会在同一元素上触发focus
事件,从而再次触发事件处理程序,从而导致它永久循环。
只是删除$(this).find("input").focus();
编辑:停止事件传播(和防止focus
上input
的DOM冒泡到.input
并导致循环),你的代码改成这样:
$("body").on("focus", ".input", function() {
$("body").append("loop<br>");
$(this).find("input").focus(function(e){ e.stopPropagation(); });
});
因为这会在体内找到输入并将其聚焦并再次调用该焦点事件。 所以它是无限循环。
$("body").on("focus", ".input", function() {
$("body").append("loop<br>");
$(this).find("input").focus(); //this finds the input in body and focus it and call this function again
});
删除$(this).find("input").focus();
$("body").on("focus", ".input", function() {
$("body").append("loop<br>");
});
它循环,因为在代码的最后一行:
$(this).find("input").focus();
下去,因为它有一个附加事件与焦点运行,它会循环。
IE,Safari,Opera或Firefox中不产生这样的问题,但Chrome是给这个问题。所以解决它,我们必须使用一些技巧。 我正在提供我自己的解决方案,即 我使用了可见性为false的按钮,并在关注焦点结束时尝试点击该按钮以解决问题。像明智的我得到了解决方法。
另一个解决方案 用户alert语句来解决它。
请检查小提琴。 –
解释你正在尝试做什么 – charlietfl
当我聚焦包装,将焦点移动到内部输入。 –