将触发的元素传递给bootbox回调jquery

时间:2015-05-05 23:35:27

标签: jquery callback element bootbox

我想将'a.delete'触发元素传递给我的bootbox回调,有没有办法做到这一点?

var confirm = false;
$('body').on('click', 'a.delete', function(e) {
    if( confirm == false){ e.preventDefault(); }
    bootbox.confirm("Confirm?", function(result) {
        if(result == true){
            confirm = true;
            $(this).trigger('click');
        }
    });
});

修改 好吧,Taplar我做了你说的,但是没有触发动作,即使“触发点击”正在工作......

var confirm = false;
$('body').on('click', 'a.delete', function(e) {
    var element = $(this);
    if( confirm == false){
        e.preventDefault();
        bootbox.confirm("Confirm?", function(result) {
            if(result == true){
                confirm = true;
                console.log(confirm);
                element.trigger('click');
            }
        });
    } else {
        console.log('triggered again');
    }
});

退出:点击确认按钮后我得到的内容

true

triggered again

我的解决方案

var confirm = false;
$('body').on('click', 'a.delete', function(e) {
    var element = $(this);
    if( confirm == false){
        e.preventDefault();
        bootbox.confirm("Confirm?", function(result) {
            if(result == true){
                confirm = true;
                $(element)[0].click();
            }
        });
    } else {confirm = false;}
});

2 个答案:

答案 0 :(得分:0)

在你打电话给bootbox.confirm之前,请存储"这个"在可变的。

var clickedElement = this;

然后在bootbox.conf内部你可以引用" clickedElement"。

答案 1 :(得分:0)

虽然您可能有"工作",但您真的不想使用超链接进行删除操作。通过这样做,您使用GET请求来触发服务器端的更改(以及那里的破坏性更改),这应该是a bit of a no-no

  

特别是,已经建立了GET和GET的惯例   HEAD方法不应该具有采取行动的意义   除了检索。应该考虑这些方法"安全"。   这允许用户代理表示其他方法,例如POST,PUT   和DELETE,以一种特殊的方式,使用户了解   事实上,正在要求采取可能不安全的行动。

更好的解决方案是将实际按钮的各个表单替换为超链接,如下所示:

<form method="post" action="your/deleteaction" class="delete-item">
    <input name="ID" value="1" />
    <button type="submit" class="btn btn-danger">Delete</button>
</form>

然后你可以做类似的事情:

$(document).on('submit', 'form.delete-item', function(e) {
    bootbox.confirm("Really delete this item?", function(result) {
        if(result !== true){
            e.preventDefault(); 
        }
    });
});

通过这种方式,您可以遵循最佳实践,并且使用bootbox confirm作为转义子句,而不必重新触发链接。