【问题标题】:confirm box more than one time appears出现多次确认框
【发布时间】:2012-05-12 17:47:25
【问题描述】:

我正在使用 jquery 使用 ajax,我正在使用以下代码 sn-p 删除一行:

$('#example a.delete'). live('click', function (e) {
e.preventDefault();
if (confirm("Are you sure you want to delete this row?"))
{

     alert("Hello World!")
}

});

当我单击网格视图显示按钮时,由于 ajax,网格视图出现时没有刷新页面。如果我多次单击网格视图显示按钮,它会相应地再次刷新网格视图区域。但是确认框显示不止一次,这等于我的没有。 grid-view show button的点击次数,当我点击单行删除按钮时。

如何避免这种情况!

已编辑

HTML 代码:

<td><a class="delete" href="#" style="margin-left: 10px"><img src="images/delete-icon.png" width="16px" height="16px" /></a></td>

已编辑

完整的代码片段:

$('#example a.delete'). live('click', function (e) {
e.preventDefault();
if (confirm("Are you sure you want to delete this row?"))
{
    $getCode = $(this).parent().parent().attr('id');
    var oTable = $('#example').dataTable();
    var index =oTable.fnGetPosition( document.getElementById($getCode) );

    $.post("DeleteDepartment", {
        depID:$getCode                   
    }, function(data) {
        if(data.result >0){
            var oTable = $('#example').dataTable();
            oTable.fnDeleteRow( index );
        }else{
            alert("Operation Fail");
        }
    });

}

});

【问题讨论】:

  • 你用的是什么jquery版本?
  • jQuery v1.7.1 @ltiong_sh

标签: javascript jquery ajax


【解决方案1】:
$('#example a.delete').unbind('click').bind('click', function (e) {
     e.preventDefault();

     if (confirm("Are you sure you want to delete this row?"))
     {

        alert("Hello World!")
     }

});

【讨论】:

  • 您的代码不适用于动态添加的新行,直到页面刷新@pankil thakkar
【解决方案2】:

您似乎将多个事件附加到按钮。你确定你只打电话给live() ONCE,而且只有一次吗?如果你多次调用它,你会得到多个处理程序。

(当然,这也是我个人更喜欢使用.onclick = function() {...}的原因)

【讨论】:

  • 是的,亲爱的,我叫它一次@Kolink
【解决方案3】:

看起来代码是为每次点击执行一次确认而编写的。 如果您希望它只确认一次,您必须让代码记住您已经确认。

在服务器调用您的成功回调函数之前,不会删除该行。在此期间,您可以继续点击该行并触发点击事件。

您可以在用户确认时在行上设置变量或属性,然后在每次单击时检查此变量。仅在未设置变量时显示确认消息。

或者您可以更改您单击的元素的状态、更改其图像、更改样式、设置属性。您既可以通知您的代码它已被单击,也可以向用户指示该行已被标记为删除。

或者您可以尝试 jquery 的 .one() 方法来附加事件。

【讨论】:

  • alert("Hello World!") 只是 sample ,我在这里删除当前行。但它不止一次确认@joshp
  • 我明白了。这在代码中并不明显。如果你没有找到解决方案,可能最好做一个小例子来实际显示问题并将其放在 jsfiddle 中。
  • 好的,这就解释了。删除发生在 .post 从服务器返回之后。这就是为什么你可以点击它两次。
  • @BothFM 该帖子是异步调用,因此您可以释放控制权并允许 UI 操作。然后浏览器回调你删除行的成功函数。
  • 亲爱的,我没有点击两次。单击一次,确认框出现两次或多次,一一出现。当我在第一个确认框上取消时,突然出现第二个。
猜你喜欢
  • 1970-01-01
  • 2016-09-16
  • 1970-01-01
  • 2012-03-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多