如何将变量传递给Bootbox确认框?

3

有没有可能将jQuery变量传递到bootbox.js确认框中?

以下是代码:

bootbox.confirm({
message: 'Are you sure you want to remove [productName]?',
callback: function(result) {
    console.log(result);
},
title: "You can also add a title",
});

“productName”是一个变量,类似于:

var productName = $('#product_name').val();

这种情况是否可能实现?

更新:感谢下面的回答!

延伸到这个问题....如果我有这样一些东西:

$('#product_name1 a.trash').click(function(event){

event.stopImmediatePropagation();           
event.preventDefault();

var foo = $(this).parent().attr('id');  // #product_name1

alert(foo); // correct!

bootbox.confirm({
message: 'Are you sure you want to remove [productName]?',
callback: function(result) {
   if (confirmed) 
    alert(foo); // undefined!
   }
}

});

});

如何在回调中重新定义“this”?由于它现在指的是bootbox,所以“foo”返回undefined。
2个回答

2

是的,您可以这样做,只需将值与消息字符串连接起来:

var productName = $('#product_name').val();

bootbox.confirm({
message: 'Are you sure you want to remove'+productName,
callback: function(result) {
    console.log(result);
},
title: "You can also add a title",

更加简洁的说法:
var productName = $('#product_name').val();
var Message = 'Are you sure you want to remove'+productName;

    bootbox.confirm({
    message: Message ,
    callback: function(result) {
        console.log(result);
    },
    title: "You can also add a title",

你知道为什么在回调函数中使用$(this)时相同的方法不起作用吗?似乎$(this)未定义,因为它现在指的是bootbox。有没有一种方法可以在回调函数中重新定义“this”? - LBF
你需要在回调函数外部存储它的引用,并使用该引用。 - Ehsan Sajjad
我可能需要开一个新的问题。我尝试在bootbox之前定义var Foo = $(this).attr('id');,但是当我在回调函数中引用Foo时,它是未定义的。 - LBF
我更新了我的问题并展示了代码。感谢您的查看。 - LBF
你能在 JSFiddle 上重现这个吗? - Ehsan Sajjad

2
如果您需要在回调函数中使用此变量,可以通过将其设置为“全局”来传递它,但在用户调用确认和开始执行回调之间的时间内,其他一些脚本可能会更改它(或反转),因此为了防止冲突,最好创建一个带有设置、获取变量和阻止机制的方法对象,在设置/获取事件上锁定/解锁变量状态并执行所有非异步事件。
var _this = this;
confirm({
    title: "Menu discard",
    message: 'Are you sure?',
    callback: function(resolve) {
        if(resolve) {
            // _this is accessible
        }
    }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接