bootbox 提示 select 带有来自数据库的选项
bootbox prompt select with options from database
我正在使用带 select 的引导箱提示符。要为 select 构建选项,您必须提供如下内容:
inputOptions: [
{
text: 'Ad inizio tabella',
value: '',
},
{
text: 'Choice One',
value: '1',
},
{
text: 'Choice Two',
value: '2',
},
{
text: 'Choice Three',
value: '3',
}
]
我想使选项变量从数据库中获取它们。所以我建立了一个函数:
$.getJSON( "get_fields.php", { wizard: wizard } ).done(function(data){fields_selected=data;});
如预期的那样 returns JSON:
[
{
"text":"Inserisci dopo Nome",
"value":"Nome"
},
{
"text":"Inserisci dopo cognome",
"value":"cognome"
}
]
将它传递给我尝试做的bootbox函数:
var fields = '';
$.getJSON( "get_fields.php", { wizard: wizard } ).done(function(data){fields_selected=data;});
bootbox.prompt({
title: "Scegli dopo quale campo inserire il nuovo",
inputType: 'select',
inputOptions: fields,
callback: function (result) {
但在这两种情况下我都得到以下信息:
Uncaught Error: Error: prompt with select requires options
因为字段仍然是空的。
我缺少什么才能注入来自 getJson 的数据?
因为$.getJSON is an asynchronous call and returns a promise you cannot use directly without resolving它。
因此您可以使用 bootbox.init callback 来初始化您的 select 盒子:
var data = [{
text: 'Ad inizio tabella',
value: ''
}, {
text: 'Choice One',
value: '1'
}, {
text: 'Choice Two',
value: '2'
}, {
text: 'Choice Three',
value: '3'
}
];
$.getJSON("http://localhost:63342/Whosebug/1.html");
var dialog = bootbox.prompt({
title: "Scegli dopo quale campo inserire il nuovo",
inputType: 'select',
inputOptions: [{text: '', value: ''}],
callback: function (result) {
var x = this;
}
});
dialog.init(function (e) {
// remove comment from next line.....
// $.getJSON("get_fields.php", function (data, textStatus, jqXHR) {
// wait for a while....
setTimeout(function () {
// get the bootbox select object
var sb = dialog.find('.bootbox-body .bootbox-input-select');
sb.empty();
data.forEach(e => sb.append($('<option/>', {value: e.value, text: e.text})));;
}, 500);
// remove comment from next line.....
//});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootbox.js/5.4.0/bootbox.min.js"></script>
由于 $.getJSON
是一个 AJAX 呼叫,您的选项在该呼叫解决之前不存在。 jQuery AJAX 函数是非阻塞的,因此您正在创建一个带有“空”对象的 Bootbox 提示符。
最简单的解决方法是在 AJAX 函数的成功回调中创建提示。类似于:
$.getJSON("get_fields.php")
.done(function(data) {
bootbox.prompt({
title: 'Select an option',
inputOptions: data,
callback: function(result){
}
});
});
我正在使用带 select 的引导箱提示符。要为 select 构建选项,您必须提供如下内容:
inputOptions: [
{
text: 'Ad inizio tabella',
value: '',
},
{
text: 'Choice One',
value: '1',
},
{
text: 'Choice Two',
value: '2',
},
{
text: 'Choice Three',
value: '3',
}
]
我想使选项变量从数据库中获取它们。所以我建立了一个函数:
$.getJSON( "get_fields.php", { wizard: wizard } ).done(function(data){fields_selected=data;});
如预期的那样 returns JSON:
[
{
"text":"Inserisci dopo Nome",
"value":"Nome"
},
{
"text":"Inserisci dopo cognome",
"value":"cognome"
}
]
将它传递给我尝试做的bootbox函数:
var fields = '';
$.getJSON( "get_fields.php", { wizard: wizard } ).done(function(data){fields_selected=data;});
bootbox.prompt({
title: "Scegli dopo quale campo inserire il nuovo",
inputType: 'select',
inputOptions: fields,
callback: function (result) {
但在这两种情况下我都得到以下信息:
Uncaught Error: Error: prompt with select requires options
因为字段仍然是空的。 我缺少什么才能注入来自 getJson 的数据?
因为$.getJSON is an asynchronous call and returns a promise you cannot use directly without resolving它。
因此您可以使用 bootbox.init callback 来初始化您的 select 盒子:
var data = [{
text: 'Ad inizio tabella',
value: ''
}, {
text: 'Choice One',
value: '1'
}, {
text: 'Choice Two',
value: '2'
}, {
text: 'Choice Three',
value: '3'
}
];
$.getJSON("http://localhost:63342/Whosebug/1.html");
var dialog = bootbox.prompt({
title: "Scegli dopo quale campo inserire il nuovo",
inputType: 'select',
inputOptions: [{text: '', value: ''}],
callback: function (result) {
var x = this;
}
});
dialog.init(function (e) {
// remove comment from next line.....
// $.getJSON("get_fields.php", function (data, textStatus, jqXHR) {
// wait for a while....
setTimeout(function () {
// get the bootbox select object
var sb = dialog.find('.bootbox-body .bootbox-input-select');
sb.empty();
data.forEach(e => sb.append($('<option/>', {value: e.value, text: e.text})));;
}, 500);
// remove comment from next line.....
//});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootbox.js/5.4.0/bootbox.min.js"></script>
由于 $.getJSON
是一个 AJAX 呼叫,您的选项在该呼叫解决之前不存在。 jQuery AJAX 函数是非阻塞的,因此您正在创建一个带有“空”对象的 Bootbox 提示符。
最简单的解决方法是在 AJAX 函数的成功回调中创建提示。类似于:
$.getJSON("get_fields.php")
.done(function(data) {
bootbox.prompt({
title: 'Select an option',
inputOptions: data,
callback: function(result){
}
});
});