JavaScript函数无法克隆表行

JavaScript函数无法克隆表行,javascript,jquery,razor,Javascript,Jquery,Razor,为了让您了解我的情况,在我的代码中,一个项目可以包含一些部分,用户可以使用这些部分来获取、传输或处置它们。例如,一个项目可以有5个部分。现在,当用户选择一个单选框选项时,它将以相同的方式处理所有这些部件。因此,我创建了一个复选框选项,用户可以在其中“取消选择”所有选项。然后,我希望创建两个相同的行,以便用户可以选择,例如,传输2、收获2、处置1 我有一个复选框,用于调用jQuery函数,如下所示 <tr class="tr_clone"> <td>

为了让您了解我的情况,在我的代码中,一个项目可以包含一些部分,用户可以使用这些部分来获取、传输或处置它们。例如,一个项目可以有5个部分。现在,当用户选择一个单选框选项时,它将以相同的方式处理所有这些部件。因此,我创建了一个复选框选项,用户可以在其中“取消选择”所有选项。然后,我希望创建两个相同的行,以便用户可以选择,例如,传输2、收获2、处置1

我有一个复选框,用于调用jQuery函数,如下所示

<tr class="tr_clone">
<td>
    @part.PartIDLink
</td>
<td>
    @Html.DisplayFor(x => x.Parts[i].PartName)
    @Html.HiddenFor(x => x.Parts[i].PartName)
 </td>
<td style="font-weight:bold">
    @Html.DisplayFor(x => x.Parts[i].QtyInItem)
    @Html.HiddenFor(x => x.Parts[i].QtyInItem)
</td>
<td>
    <input type="checkbox" id="all@(part.ID)" onchange="doalert(this.id, @part.ID)" checked>
</td>
@foreach (var actionType in partActionTypes)
{
   <td>
       @Html.RadioButtonFor(x => x.Parts[i].SelectedActionType, actionType)
   </td>
}
</tr>
我的行中有一个复选框字段,单击它时调用jQuery函数,如下所示

<tr class="tr_clone">
<td>
    @part.PartIDLink
</td>
<td>
    @Html.DisplayFor(x => x.Parts[i].PartName)
    @Html.HiddenFor(x => x.Parts[i].PartName)
 </td>
<td style="font-weight:bold">
    @Html.DisplayFor(x => x.Parts[i].QtyInItem)
    @Html.HiddenFor(x => x.Parts[i].QtyInItem)
</td>
<td>
    <input type="checkbox" id="all@(part.ID)" onchange="doalert(this.id, @part.ID)" checked>
</td>
@foreach (var actionType in partActionTypes)
{
   <td>
       @Html.RadioButtonFor(x => x.Parts[i].SelectedActionType, actionType)
   </td>
}
</tr>

@part.PartIDLink
@DisplayFor(x=>x.Parts[i].PartName)
@Html.HiddenFor(x=>x.Parts[i].PartName)
@DisplayFor(x=>x.Parts[i].QtyInItem)
@Html.HiddenFor(x=>x.Parts[i].QtyInItem)
@foreach(PartActionType中的var actionType)
{
@Html.radioButton(x=>x.Parts[i]。SelectedActionType,actionType)
}
这是我的JQuery函数

<script>
 function doalert(id, rowID) {
        var $tr = $(this).closest('.tr_clone');
        var $clone = $tr.clone();
        $clone.find('td');
        $tr.after($clone);
 }
</script>

函数doalert(id,rowID){
var$tr=$(this).clone('.tr_clone');
var$clone=$tr.clone();
$clone.find('td');
$tr.after($clone);
}
下面是呈现的HTML


IGT部件ID
零件名称
项目中使用的数量
全部移动
转移
收获
处置

这个
的价值才是问题所在,但盖伊·蒙克尼托的暗示并不能说明全部情况。在jQuery中,
$(this)
通常引用适当事件处理程序上的事件目标。因为您没有使用,所以它是空的

在脚本中绑定事件,而不是内联更改处理程序,如下所示:

$('.tr_clone input.some-class').change(function() { // where some-class is on the checkbox
    let Id = $(this).attr('id');
    // set this attribute in your template
    let partId = $(this).attr('data-partId');

    // ...
}
要从模板中传递
partId
的值,请使用数据属性:

<input type="checkbox" id="all@(part.ID)" data-partId="@(part.ID)" class="some-class">


这个
的价值是问题所在,但盖伊的暗示并不能说明全部。在jQuery中,
$(this)
通常引用适当事件处理程序上的事件目标。因为您没有使用,所以它是空的

在脚本中绑定事件,而不是内联更改处理程序,如下所示:

$('.tr_clone input.some-class').change(function() { // where some-class is on the checkbox
    let Id = $(this).attr('id');
    // set this attribute in your template
    let partId = $(this).attr('data-partId');

    // ...
}
要从模板中传递
partId
的值,请使用数据属性:

<input type="checkbox" id="all@(part.ID)" data-partId="@(part.ID)" class="some-class">


代码中的
find()
行没有任何作用。调用函数时,
this
的值为
window
。(这就是为什么内联事件处理程序通常不是一个好主意——当使用jQuery时,也可以使用它来附加事件处理程序。)不,ID值不是一个因素。这是个好建议。您的标记问题可能是一个因素:
<代码>var$tr=$(this).clone('.tr_clone')
不重要吗?@GuyIncognito ohhh我以为你说的是我将
this.id
传递到方法中代码中的
find()
行没有任何作用。调用函数时,
this
的值是
window
。(这就是为什么内联事件处理程序通常不是一个好主意——当使用jQuery时,也可以使用它来附加事件处理程序。)不,ID值不是一个因素。这是个好建议。您的标记问题可能是一个因素:
<代码>var$tr=$(this).clone('.tr_clone')
不重要吗?@GuyIncognito哦,我以为你在说我把
这个.id
传递到方法中,谢谢!对这一部分有点困惑
//在模板中设置这个属性让partId=$(this.attr('data-partId')答案更新。您可能需要调整模板的语法。我猜,嗯。我试过了,但仍然无法复制行。这就是我的样子
$('.tr_clone input.some class').change(函数(){let Id=$(This.attr('Id');let partId=$(This.attr('data-partId');var$tr=$(This.clone');var$clone=$tr.clone();$clone.find('td');$tr after($clone);}
如果您希望克隆具有与使用
clone()相同的事件处理程序,那么我的复选框看起来像这样
函数的
true
参数或事件委派:嗯,很奇怪,我就是不能让它克隆行。即使在与您的hanks比较之后!只是对这一部分有点困惑
//在模板中设置此属性让partId=$(this).attr('data-partId'))
答案已更新。您可能需要调整模板的语法。我在猜。嗯。我尝试了此操作,但仍然无法复制该行。这是我的操作看起来像
$('.tr_clone input.some class')。更改(函数(){let Id=$(this.attr('Id');let partId=$(this.attr('data-partId');var$tr=$(this.tru clone'));var$clone=$tr.clone();$clone.find('td');$tr.after($clone);}
如果希望克隆具有相同的事件处理程序,则需要使用
克隆()
函数的
true
参数或事件委派:嗯,奇怪的是,我无法让它克隆行。即使与您的进行比较