jquery删除表行帮助

时间:2011-01-21 16:07:37

标签: javascript jquery

我有一些这样的代码删除一行然后显示一个对话框。

我第一次点击删除ID会立即删除该行。 但在我尝试删除的任何后续行中,有时需要多次单击才能删除该行。

有时对话框显示,行仍在那里!

是什么事?

编辑 - 数据库正确更新但行仍然存在。它有点不稳定有时它会删除有时我必须点击两次。

$(".delete-item").click(function () {
            var itemId = $(this).attr("id").split('-')[1];
            var iType = $(this).attr("id").split('-')[0];

            $.post('/User/Delete/', { id: itemId, itemType: iType },function (json) {
                if (json.success) {

                    console.log("#row-"+itemId);
                    $("#row-"+itemId).hide('slow', function(){ $(this).remove(); });

                    //$("#dialog-success-delete").dialog("open");


                } else {
                    if(json.error=="unknown"){
                        $("#dialog-unknown-error").dialog("open");
                    }
                    if(json.error=="unauthenticated"){
                        $("#dialog-unauthenticated").dialog("open");
                    }
                }
            });

4 个答案:

答案 0 :(得分:1)

这可能是一个计时问题 - 如果在点击另一行之前没有发生动画回调,则itemId将引用错误的项目。

更改为:

$("#row-"+itemId).hide('slow', function(){ $(this).remove(); });

由于模态有时仅显示,我确信还有其他问题。

post api上有一条关于默默失败

的说明
  

返回jQuery.post()的请求   一个错误代码,它将无声地失败   除非脚本也调用了   global .ajaxError()

这是我最好的猜测,因为服务器错误,成功回调永远不会发生。

答案 1 :(得分:1)

原来问题是我在页面上有多个具有相同ID的行! 我正在使用制表符,表格分别位于不同的标签中。

答案 2 :(得分:0)

验证您的选择器是否正确。使用Chrome或Firefox + Firebug + Firequery,console.log($"#row-"+itemId)使用.remove()。最可能的原因是itemId没有像你期望的那样与行ID对齐。

答案 3 :(得分:0)

对于初学者,你应该在隐藏发生后在函数中包含对话框,这样只有在隐藏行时才弹出。其次,在您进入后使用this选择器。这将验证您是否始终在最初单击的同一行上工作。最后,我没有在您的代码中看到click方法,因此请确保您也正确执行此操作。

此代码适用于我的快速测试:

$("#row-"+itemId).click(function() {
  $(this).hide('slow', function() {
    $(this).remove();
    $("#dialog-success-delete").dialog("open");
  });
});