【问题标题】:can't remove more than one table row, without refreshing the page在不刷新页面的情况下,不能删除多个表格行
【发布时间】:2012-05-27 07:28:15
【问题描述】:

在 MVC 中,我通过迭代视图模型的“列表”在视图中构建了一个表。

@foreach(var item in Model)
{
<tr id="row-@item.name">
    <td>
        @item.type
    </td>
    <td >
        @Html.ActionLink((string)item.name, "Download", "FileUpload", new { rout = item.rout, fileName = item.name }, null)
    </td>
    <td>
        @item.size
    </td>
    <td>
        <a href="#" id="delete-file" del-url="@item.delete_url">Delete</a>
    </td>
</tr>

}

当我加载页面时,我会得到一个文件列表,每个文件都有一个“删除”链接。

我用 jQuery 实现了一个基本的“删除行”方法:

$('#delete-file').click(function() {
    var delUrl = $(this).attr('del-url');
    $.post(delUrl, null, removeRow(),'json')
});

function removeRow() {
   $($('#delete-file').closest('tr')).fadeOut('slow');
}

当我在其中一个文件行上单击“删除”时,它运行良好,但是,如果我单击另一个(删除),则没有任何反应。服务器上没有文件被删除,并且该行没有被删除,就好像它被完全忽略了一样。

【问题讨论】:

  • 你的 js 有错误。匿名函数未关闭,行未结束。 jsfiddle.net/7Z4C4
  • 我推荐使用data-del-url="".data('del-url')。自定义属性像您现在一样无效。

标签: javascript jquery model-view-controller tablerow


【解决方案1】:

这一行:

$.post(delUrl, null, removeRow(),'json');

就相当于这样:

$.post(delUrl, null, undefined, 'json');

removeRow() 函数不返回任何内容。将该行更改为:

$.post(delUrl, null, removeRow,'json');   //Without '()' after 'removeRow'

我猜你的removeRow 函数不会像你预期的那样工作。该功能将隐藏所有行,但您只需隐藏单击“删除文件”的那一行。因此,您需要将该行的引用传递给 removeRow 函数。这是这样做的一种方法:

$('#delete-file').click(function() {
   var delUrl = $(this).attr('del-url');
   var $row = $(this).closest('tr');
   $.post(delUrl, null, function(){
       removeRow($row);
   },'json')
});

function removeRow($row) {   $row.fadeOut('slow');   }

【讨论】:

  • +1 重点是removeRow references 函数,而removeRow() 执行它。不希望执行它。引用它。
【解决方案2】:

您需要阻止&lt;a&gt;元素的默认操作,并使用正确的选择器

$('.delete-file').click(function(e) {
    e.preventDefault();
    var self=this,
        delUrl = $(this).attr('del-url');
    $.post(delUrl, function() {
        $(self).closest('tr').fadeOut('slow');
    },'json');
});

【讨论】:

    【解决方案3】:

    这是你的解决方案:

    http://jsfiddle.net/irpm/enEAt/1/

    javascript 是:

    $('.delete-file').click(function(e) {
        $(this).closest('tr').remove();
    });​
    

    【讨论】:

    • @sergel 当我在删除行后刷新页面时,它又回来了。我想从该行中永久删除该行。这怎么可能??
    【解决方案4】:

    您需要使用class="delete-file" 而不是id="delete-file" - 当然还需要使用相应的$(".delete-file") 选择器。

    每个文档的 ID 都是唯一的,您的代码将处理程序绑定到第一个 id="delete-file" 元素。

    【讨论】:

    • tnks!顺便说一句,虽然它很简单,但应该如何调试像这些和 jquery 这样的情况呢?
    猜你喜欢
    • 1970-01-01
    • 2019-11-16
    • 2017-05-11
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2011-02-23
    相关资源
    最近更新 更多