Javascript 通过克隆带有附加事件的最后一行在表tbody上添加新行
我试图克隆带有可能附加了事件的输入字段的表的最后一行(在本例中是keyup事件)。我还更改了输入字段的id以反映它们所在的行,例如: 表[0]。字段1,表[0]。字段2…表[1]。字段1…等 问题是我可以添加一行,它也会获取事件,当我在新的克隆输入上写入时,它们会启动事件。但仅在创建的第一行上。如果我创建一个新的,它将使用正确的输入而不是事件来呈现行。方法如下:Javascript 通过克隆带有附加事件的最后一行在表tbody上添加新行,javascript,jquery,clone,Javascript,Jquery,Clone,我试图克隆带有可能附加了事件的输入字段的表的最后一行(在本例中是keyup事件)。我还更改了输入字段的id以反映它们所在的行,例如: 表[0]。字段1,表[0]。字段2…表[1]。字段1…等 问题是我可以添加一行,它也会获取事件,当我在新的克隆输入上写入时,它们会启动事件。但仅在创建的第一行上。如果我创建一个新的,它将使用正确的输入而不是事件来呈现行。方法如下: addRow= function(tableid){ //jquery selector get table tbody w
addRow= function(tableid){
//jquery selector get table tbody with id
var table=jQuery('table[id="'+tableid+'"] >tbody');
//get last row containing input fields with tr class hoverTransparente
var lastRow=jQuery('table[id="'+tableid+'"] > tbody > tr:last');
//make a clone of the row
var clones = lastRow.clone(true); // copy events/children too
//get the input fields from the cloned row
var clonedInPuts=clones.find('input');
//for each input
jQuery(clonedInPuts).each(function (){
//set new input val to empty
jQuery(this).val("");
var inputId=jQuery(this).attr('id');
//table id
var table=inputId.split("[")[0];
//column id
var tableField=inputId.split(".")[1];
var idnumber=inputId.indexOf("[")+1;
//convert to number to make addition for new id index
var number = Number(inputId.charAt(idnumber))+1;
//replace id index with incrementaed value
var newId=inputId.replace(inputId.charAt(idnumber),number);
//change id for new one
jQuery(this).attr('id',newId);
//check if this variable exists/is not undefined
if(window["elements_"+table+"_"+tableField]){
window["elements_"+table+"_"+tableField].push(jQuery(this).get(0));
}
});
clones.appendTo(table);
}
有什么想法吗?当我尝试在chrome中调试时,输入元素的domtree中的event onkeyup为null,但是如果我直接选择使用jquery并获取.data('events')方法,它会返回一个数组,其中包含附加到输入字段的事件。onkeyup不应该返回与null不同的内容吗?好的,因此问题不在这方面,而是在现有行的原始输入中创建事件的原始方法上。您需要这样做:
var selectorStr='input[id^='+table+']&[id$='+tableField+']';
jQuery(document).on('keyup',selectorStr,function(event) {...})
而不是:
var elements=jQuery('input[id^='+table+']&[id$='+tableField+']');
elements.each(function() {
jQuery(this).keyup(function(){...})
});
这将解决向平板电脑添加新行的问题,而输入事件实际上会搜索新添加的输入。如何将keyup事件附加到表行?这是什么意思?只有输入字段具有keyup events.jquery.clone()方法,如果将参数“withDataAndEvents”设置为true,则假定该方法也会复制事件。