[英]Maximum call stack size exceeded in JQuery for firing focus of next element inside focusout
我收到此错误“超出了最大调用堆栈大小”。 这是什么原因?我该如何实现自己的目标。
在Jquery / JavaScript中,我试图通过按Tab键来集中下一个控件以更改当前控件的Tab索引。 当前控件将是任何select(下拉列表)。
我的代码:
$(document).on('focusout', 'select', function () {
$(this).click();
var fields = $(this).parents('form:eq(0),body').find('button,input,textarea,select');
var index = fields.index(this);
if (index > -1 && (index + 1) < fields.length) {
fields.eq(index + 1).focus();
//checkDateAndTime();
}
});
注意:我试图通过setTimeout函数进行修复,但是如果这样做,我不会收到该错误,但是如果我尝试填充单击选项,则选择列表将关闭。
我必须这样做,因为我必须解雇$(this).click(); 因为如果我不这样做,则在按Tab键时dropdownlist选项的ui不会自动关闭,但是Mozilla中不会出现此问题。
首先,除非页面加载后没有通过某些代码或ajax生成的动态元素,否则不需要事件委托语法。
我在focusout
注意到的另一件事是,您再次对同一元素执行focusout
.click()
,这反过来又获得了焦点。
您正在使用.parents()
方法进行遍历,这在某种程度上是导致您遇到错误的原因。
我建议您这样做:
$('select').on('focusout', function() {
var fields = $(this).closest('form').find('select');
var idx = fields.index(this);
if (idx > -1 && (idx + 1) < fields.length) {
fields.eq(idx + 1).focus();
//checkDateAndTime();
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.