jQuery根据下拉列表中的选择将行移动到另一个表

Posted

技术标签:

【中文标题】jQuery根据下拉列表中的选择将行移动到另一个表【英文标题】:jQuery moving row to another table based on selection in dropdown 【发布时间】:2016-02-24 20:28:39 【问题描述】:

我有一个包含多个表格的页面(每个“活动类型”一个表格)。他们的 ID 是“活动类型”。每个表中的每一行都有一个带有下拉列表的单元格,允许用户选择他们想要将行移动到的新表的“活动类型”。

下面的 js 代码确实将一行从其原始表移动到在下拉菜单中选择的选定“活动类型”的表中。但是,移动该行后,下拉列表中的选定值仍保留为旧的“活动类型”。如何将下拉列表的值设置为该行现在所属的新“活动类型”?

$('.override-activity').change(function () 
    // get selected Activity Type
    var activityType = $("option:selected", this).text().replace(/\s+/g, '');

    // get selected row
    var tr = $(this).closest("tr").remove().clone();

    // insert selected row into new Activity Type table
    $("#" + activityType).find("table").append(tr);
);

【问题讨论】:

【参考方案1】:

发生这种情况是因为“更改”事件从未在选择上完成,因为您正在从 DOM 中删除它。

你可以做两件事:

    使用选择的开启模糊

    就在您附加 TR 之前,您可以像这样设置您的选择值:

    $(document).on('change', '.override-activity', function () 
        // get selected Activity Type
        var activityType = $("option:selected", this).text().replace(/\s+/g, '');
    
        // Get the original selected value
        var selected = $(this).val();
    
        // get selected row
        var tr = $(this).closest("tr").remove().clone();
    
        // Reset the value
        $('.override-activity', tr).val(selected);
    
        // insert selected row into new Activity Type table
        $("#" + activityType).find("table").append(tr);
    );    
    

【讨论】:

谢谢,这行得通。但是,一旦将行移动到新表并在下拉列表中重新选择了正确的活动类型,如果我现在尝试选择不同的选项,则不会发生任何事情。这是因为 DOM 现在处于某种“分离”状态吗?我可以继续移动这一行吗? Exactyl,我已经更改了我的答案以提出更好的事件绑定方式。【参考方案2】:

您可以在克隆tr 之后和附加它之前执行类似操作吗? tr.find('.override-activity').val(activityType)

【讨论】:

以上是关于jQuery根据下拉列表中的选择将行移动到另一个表的主要内容,如果未能解决你的问题,请参考以下文章

将行移动到另一个工作表,其中单元格等于工作表名称

根据jquery中的第一个下拉列表禁用下拉列表

如何根据使用 jQuery/AJAX 和 PHP/MySQL 选择的第一个下拉列表填充第二个下拉列表?

将下拉列表中的值从一个 php 传递到另一个

根据单元格值将特定范围而不是整行复制到另一个谷歌工作表

如何根据下拉列表选择的值更改表中的数据