Bootstrap Select 有回调函数
Bootstrap Select with callback function
我有 2 个 Bootstrap Select 下拉列表,一个是国家列表,另一个是州列表。国家/地区列表是静态的,并在页面加载时填充。州列表仅通过 Bootstrap 更改事件填充,并根据国家/地区加载州。
我需要能够同时填充这两个值。所以问题是我试图在未定义或尚未加载其选项时设置状态值。我试过在 ajax 调用中执行回调函数,但这似乎不起作用。我认为另一个问题是初始更改绑定正在搞砸它。
我已经就我遇到问题的地方写了一个 fiddle 作为基础。
https://jsfiddle.net/jeffbeagley/DTcHh/37843/
用户会看到一个空白表单,允许他们 select 值,但用户也可以从数据库加载保存的表单(因此函数标记为 "select_data" )。
$(document).ready(function() {
$( "#country" ).on( 'changed.bs.select', function(e) {
change_country($( this ).val());
});
$( "#load" ).click(function() {
select_data();
});
});
只要用户 select 是一个国家/地区,就会调用此函数,实际 ajax 调用会发送到数据库和 returns 所有相应的州。我尝试将状态传递给此函数并 select 以这种方式进行处理,但首先设置国家仍会触发国家更改事件并覆盖它。
function change_country(country_id) {
$.ajax({
type: 'GET',
cache: false,
url: '/echo/jsonp/',
success: function(response) {
$( "#state" ).empty();
if(country_id == 1) {
$( "#state" ).append( "<option value=1>Oklahoma</option" );
$( "#state" ).append( "<option value=2>Missouri</option" );
} else {
$( "#state" ).append( "<option value=1>Ontario</option" );
$( "#state" ).append( "<option value=2>Quebec</option" );
}
$( "#state" ).selectpicker( "refresh" );
}
});
}
这是从数据库中获取保存的表单并填充值的函数。按照其设置的方式,预期结果将是 select 加拿大国家和魁北克州
function select_data() {
var country_id = 2
var state_id = 2
$( "#country" ).selectpicker('val', country_id);
$( "#state" ).selectpicker('val', state_id);
}
感谢您的帮助!
可能已经弄清楚了..有时您只需要剥离代码并简化它就可以找到答案..
我替换了代码以填充从正在更改的国家/地区调用的事件之外的州。然后我在这个新函数中声明了一个成功的回调函数。然后我将 select 国家/地区的逻辑移动到 populate_state 函数中(这可能不合适)
您可以在此处查看更新后的 fiddle,
https://jsfiddle.net/jeffbeagley/DTcHh/37849/
所以现在函数select_data如下
function select_data() {
var country_id = 2
var state_id = 2
populate_states(country_id, function() {
$( "#state" ).selectpicker('val', state_id);
});
}
编辑----
因此,我 运行 陷入调用堆栈问题,因为它仍在应用原始更改事件。因此,当函数 select_data() 被调用时,我解除绑定到国家 selector 的任何事件,并在回调中重新绑定。
function select_data() {
var country_id = 2
var state_id = 2
$( "#country" ).off( 'changed.bs.select');
$( "#country" ).selectpicker('val', country_id);
populate_states(country_id, function() {
$( "#state" ).selectpicker('val', state_id);
$( "#country" ).on( 'changed.bs.select', function(e) {
change_country(e,$( this ).val());
});
});
}
我有 2 个 Bootstrap Select 下拉列表,一个是国家列表,另一个是州列表。国家/地区列表是静态的,并在页面加载时填充。州列表仅通过 Bootstrap 更改事件填充,并根据国家/地区加载州。
我需要能够同时填充这两个值。所以问题是我试图在未定义或尚未加载其选项时设置状态值。我试过在 ajax 调用中执行回调函数,但这似乎不起作用。我认为另一个问题是初始更改绑定正在搞砸它。
我已经就我遇到问题的地方写了一个 fiddle 作为基础。 https://jsfiddle.net/jeffbeagley/DTcHh/37843/
用户会看到一个空白表单,允许他们 select 值,但用户也可以从数据库加载保存的表单(因此函数标记为 "select_data" )。
$(document).ready(function() {
$( "#country" ).on( 'changed.bs.select', function(e) {
change_country($( this ).val());
});
$( "#load" ).click(function() {
select_data();
});
});
只要用户 select 是一个国家/地区,就会调用此函数,实际 ajax 调用会发送到数据库和 returns 所有相应的州。我尝试将状态传递给此函数并 select 以这种方式进行处理,但首先设置国家仍会触发国家更改事件并覆盖它。
function change_country(country_id) {
$.ajax({
type: 'GET',
cache: false,
url: '/echo/jsonp/',
success: function(response) {
$( "#state" ).empty();
if(country_id == 1) {
$( "#state" ).append( "<option value=1>Oklahoma</option" );
$( "#state" ).append( "<option value=2>Missouri</option" );
} else {
$( "#state" ).append( "<option value=1>Ontario</option" );
$( "#state" ).append( "<option value=2>Quebec</option" );
}
$( "#state" ).selectpicker( "refresh" );
}
});
}
这是从数据库中获取保存的表单并填充值的函数。按照其设置的方式,预期结果将是 select 加拿大国家和魁北克州
function select_data() {
var country_id = 2
var state_id = 2
$( "#country" ).selectpicker('val', country_id);
$( "#state" ).selectpicker('val', state_id);
}
感谢您的帮助!
可能已经弄清楚了..有时您只需要剥离代码并简化它就可以找到答案..
我替换了代码以填充从正在更改的国家/地区调用的事件之外的州。然后我在这个新函数中声明了一个成功的回调函数。然后我将 select 国家/地区的逻辑移动到 populate_state 函数中(这可能不合适)
您可以在此处查看更新后的 fiddle, https://jsfiddle.net/jeffbeagley/DTcHh/37849/
所以现在函数select_data如下
function select_data() {
var country_id = 2
var state_id = 2
populate_states(country_id, function() {
$( "#state" ).selectpicker('val', state_id);
});
}
编辑---- 因此,我 运行 陷入调用堆栈问题,因为它仍在应用原始更改事件。因此,当函数 select_data() 被调用时,我解除绑定到国家 selector 的任何事件,并在回调中重新绑定。
function select_data() {
var country_id = 2
var state_id = 2
$( "#country" ).off( 'changed.bs.select');
$( "#country" ).selectpicker('val', country_id);
populate_states(country_id, function() {
$( "#state" ).selectpicker('val', state_id);
$( "#country" ).on( 'changed.bs.select', function(e) {
change_country(e,$( this ).val());
});
});
}