我有一些这样的代码删除一行然后显示一个对话框。
我第一次点击删除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");
}
}
});
答案 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");
});
});