Jquery 如何克隆克隆的表行?

Jquery 如何克隆克隆的表行?,jquery,clone,rows,Jquery,Clone,Rows,我有一个表,其中已经有5行了,我添加了js代码,这样当用户在最后一行中键入内容时,它会被克隆(工作正常),但当用户在克隆行中键入内容时,它不会被克隆。有人能帮我解释一下为什么它不起作用吗 $(文档).ready(函数(){ $(“.keynum”).change(函数(事件){ 美元(“#frmOK”).val(“1”); var pid=$('#p').val(); lastval=$(“.keynum”).last().val(); 如果(lastval!=“”){ var$tableBo

我有一个表,其中已经有5行了,我添加了js代码,这样当用户在最后一行中键入内容时,它会被克隆(工作正常),但当用户在克隆行中键入内容时,它不会被克隆。有人能帮我解释一下为什么它不起作用吗

$(文档).ready(函数(){
$(“.keynum”).change(函数(事件){
美元(“#frmOK”).val(“1”);
var pid=$('#p').val();
lastval=$(“.keynum”).last().val();
如果(lastval!=“”){
var$tableBody=$('tblKeyNumQty')。查找(“tbbody”),
$trLast=$tableBody.find(“tr:last”),
$trNew=$trLast.clone();
$trLast.after($trNew);
}
});
});

钥匙号码
量

将更改处理程序也添加到新创建的表行中:

function keynumChange(event) {
        $("#frmOK").val("1");
        var pid = $('#p').val();

        lastval = $(".keynum").last().val();
        if (lastval != "") { 
            var $tableBody = $('#tblKeyNumQty').find("tbody"),
            $trLast = $tableBody.find("tr:last"),
            $trNew = $trLast.clone();
            $trNew.change(keynumChange); // <- mind this!
            $trLast.after($trNew);
        }

}
$( document ).ready(function() {
    $( ".keynum" ).change(keynumChange);
});
函数keynumChange(事件){
美元(“#frmOK”).val(“1”);
var pid=$('#p').val();
lastval=$(“.keynum”).last().val();
如果(lastval!=“”){
var$tableBody=$('tblKeyNumQty')。查找(“tbbody”),
$trLast=$tableBody.find(“tr:last”),
$trNew=$trLast.clone();

$trNew.change(keynumChange);//也将更改处理程序添加到新创建的表行中:

function keynumChange(event) {
        $("#frmOK").val("1");
        var pid = $('#p').val();

        lastval = $(".keynum").last().val();
        if (lastval != "") { 
            var $tableBody = $('#tblKeyNumQty').find("tbody"),
            $trLast = $tableBody.find("tr:last"),
            $trNew = $trLast.clone();
            $trNew.change(keynumChange); // <- mind this!
            $trLast.after($trNew);
        }

}
$( document ).ready(function() {
    $( ".keynum" ).change(keynumChange);
});
函数keynumChange(事件){
美元(“#frmOK”).val(“1”);
var pid=$('#p').val();
lastval=$(“.keynum”).last().val();
如果(lastval!=“”){
var$tableBody=$('tblKeyNumQty')。查找(“tbbody”),
$trLast=$tableBody.find(“tr:last”),
$trNew=$trLast.clone();

$trNew.change(keynumChange);//在处理动态添加的DOM元素时,必须将事件委托给自网页加载以来就存在的祖先元素。在这种情况下,
(不是在问题的HTML中提供的,但显然jQuery提供了一个)。即使
(即使是
文档
也是所有
的祖先元素,
“change”
事件仅适用于
元素和表单控件(例如
等)

99%的时间
.on()
方法是委派事件的最佳方式。以下是最有效的模式:

$("selectorOfAncestor").on("eventType", "selectorOfTargets", eventHandler);
// So if you had <form id="OK"> wrapped around the <table>...
$("#OK").on("change", ".keynum:last", cloneLast)
// When defining the event handler (ex. function cloneLast(e) {... ) ".keynum:last" = this

另外,请注意,我通过在
周围包装一个
,并将引导类
.text center
应用于
。属性
[align]
已被弃用,如果没有引导,请使用CSS属性
text align

还有一条建议:如果您将jQuery/JavaScript放在结束正文标记(即
)之前,那么您不需要将所有内容都包装在
$(文档)中。就绪({…})
。无论您是否这样做,将
放在结束
标记之前是99%最有效的位置

演示
$('OK').on('change','keynum:last',cloneLast);
功能克隆体(e){
如果($(this.val()!=''){
$(this.nexist('tr').clone().appendTo($(this.nexist('tbody'));
}
}
$('input')。在('keypress',函数(e)上{
返回e.keyCode!=13
});

钥匙号码
量

在处理动态添加的DOM元素时,必须将事件委托给自网页加载以来就存在的祖先元素。在这种情况下,
(未在有问题的HTML中提供,但通过提供的jQuery显然存在一个)。即使
(即使是
文档
也是所有
的祖先元素,
“change”
事件仅适用于
元素和表单控件(例如
等)

99%的时间
.on()
方法是委派事件的最佳方式。以下是最有效的模式:

$("selectorOfAncestor").on("eventType", "selectorOfTargets", eventHandler);
// So if you had <form id="OK"> wrapped around the <table>...
$("#OK").on("change", ".keynum:last", cloneLast)
// When defining the event handler (ex. function cloneLast(e) {... ) ".keynum:last" = this

另外,请注意,我通过在
周围包装一个
,并将引导类
.text center
应用于
。属性
[align]
已被弃用,如果没有引导,请使用CSS属性
text align

还有一条建议:如果您将jQuery/JavaScript放在结束正文标记(即
)之前,那么您不需要将所有内容都包装在
$(文档)中。就绪({…})
。无论您是否这样做,将
放在结束
标记之前是99%最有效的位置

演示
$('OK').on('change','keynum:last',cloneLast);
功能克隆体(e){
如果($(this.val()!=''){
$(this.nexist('tr').clone().appendTo($(this.nexist('tbody'));
}
}
$('input')。在('keypress',函数(e)上{
返回e.keyCode!=13
});

钥匙号码
量

这是否回答了您的问题?这是否回答了您的问题?这有一个完美的复制目标。为什么您只添加另一份答案而不是投票关闭?主要是因为on-event属性让我感到厌烦,而且一条评论似乎从来都不公平。另外,为更改选择合适的祖先也很重要您好,谢谢您的回复。它可以工作,但是我的用于检查keynumber的ajax代码对于克隆行仍然不起作用,我的ajax代码如下:Hi@TapanB