Javascript jquery焦点行为异常,仅在第一次工作时有效

Javascript jquery焦点行为异常,仅在第一次工作时有效,javascript,jquery,Javascript,Jquery,我有一个id='scanTable'的动态表。 调用下面的函数时,将向表中添加一个新行,并将焦点设置在新行的第一个元素上。它在第一行工作得非常完美,但在接下来的每一行中,焦点都会转到地址栏。该函数需要从行中的最后一个元素通过制表符触发 function addNewRow() { elementName = inputType + '_' + rowCounter; var newRow = '<tr><td>' + rowCounter + '</

我有一个id='scanTable'的动态表。 调用下面的函数时,将向表中添加一个新行,并将焦点设置在新行的第一个元素上。它在第一行工作得非常完美,但在接下来的每一行中,焦点都会转到地址栏。该函数需要从行中的最后一个元素通过制表符触发

function addNewRow() {
    elementName = inputType + '_' + rowCounter;
    var newRow = '<tr><td>' + rowCounter + '</td><td><input name="' + elementName + '" type="text" id="' + elementName + '" ></td><td><input type="text" name="serial_' + rowCounter + '" id="serial_' + rowCounter + '" onBlur="serialBlur()"></td></tr>';    
    $('#scanTable tr:last').after(newRow);
    $('#' + elementName).focus();
    //document.getElementById(elementName).focus();
    // for testing, value is being set
    $('#' + elementName).val(elementName); 
    rowCounter++;
}
函数addNewRow(){
elementName=inputType+''.'+行计数器;
var newRow=''+行计数器+'';
$(#scanTable tr:last')。在(newRow)之后;
$('#'+elementName).focus();
//document.getElementById(elementName.focus();
//对于测试,正在设置值
$('#'+elementName).val(elementName);
行计数器++;
}

我无法假设一切,但以下代码对我来说是有效的。其中,
rowCounter
inputType
是全局变量

function addNewRow() {
    elementName = inputType + '_' + rowCounter;
    var newRow = '<tr><td>' + rowCounter + '</td><td><input name="' + elementName + '" type="text" id="' + elementName + '" ></td><td><input type="text" name="serial_' + rowCounter + '" id="serial_' + rowCounter + '" onBlur="serialBlur()"></td></tr>';    
    $('#scanTable tr:last').after(newRow);
    $('#' + elementName).focus();
    $('#' + elementName).val(elementName); 
    rowCounter++;
}
函数addNewRow(){
elementName=inputType+''.'+行计数器;
var newRow=''+行计数器+'';
$(#scanTable tr:last')。在(newRow)之后;
$('#'+elementName).focus();
$('#'+elementName).val(elementName);
行计数器++;
}

在这个演示中,焦点总是指向新行的第一个元素


您必须禁用串行输入的选项卡行为

function addNewRow() {
    elementName = inputType + '_' + rowCounter;
    var newRow = '<tr><td>' + rowCounter + '</td><td><input name="' + elementName + '" type="text" id="' + elementName + '" ></td><td><input type="text" name="serial_' + rowCounter + '" id="serial_' + rowCounter + '"></td></tr>';    
    $('#scanTable tr:last').after(newRow);
    $('#serial_' + rowCounter).on('keydown', function(e) {
    if(e.which == 9) { e.preventDefault();addNewRow();}
    });
    $('#' + elementName).focus();
    //document.getElementById(elementName).focus();
    // for testing, value is being set
    $('#' + elementName).val(elementName); 
    rowCounter++;
}
函数addNewRow(){
elementName=inputType+''.'+行计数器;
var newRow=''+行计数器+'';
$(#scanTable tr:last')。在(newRow)之后;
$('#serial'+行计数器).on('keydown',函数(e){
如果(e.which==9){e.preventDefault();addNewRow();}
});
$('#'+elementName).focus();
//document.getElementById(elementName.focus();
//对于测试,正在设置值
$('#'+elementName).val(elementName);
行计数器++;
}

您能验证var rowCounter是否在实际递增,ID是否在正确更改吗?您能发布一个提琴吗?是的,这就是为什么我在value字段中添加了'elementName'var。对我有用:@loli谢谢!你帮我找到了答案。我在底部添加了一个按钮,它接收tab事件的焦点,但在.focus()可以工作的区域内。这个按钮可以工作,我的触发器是文本框中的onBlur事件。参见小提琴示例。