在我的项目中,我有一些select选项组,它根据以前的值加载ajax数据。现在,当我尝试将它们复制到另一个选择选项组时,我遇到了问题。
这是方案
parmanet address Present Address
Division Division
District District
Upzilla Upzilla
Union Union
所有这些都是选择字段,然后选择每个字段后,选择由ajax加载的选项。我放了一个复选框,当用户点击复选框时,parmanent地址数据应复制到所有ajax调用的当前地址。
现在的问题是,jquery“val”函数无法正常工作,因为它在从ajax加载的数据之前运行。如果我将延迟时间设置为100毫秒,那么它可以工作,但这不是一个正确的方法。有没有更好的方法来解决这个问题?
当我改变除法以将ajax数据加载到除法时,这是我的代码,其他选项与此类似。
$('#divisions').change(function() {
$("#villtable").hide();
$("#villaddform").hide();
$.ajax({
type: 'post',
url: 'GetDistricts',
data: {
get_option:this.value
},
success: function(response) {
document.getElementById("districts").innerHTML=response;
}
});
});
这就是我试图将数据复制到当前地址组...
$.when( $('.division-prese').val(divi).trigger('change').delay( 100 ) ).then(function() {
$.when( $('.district-prese').val(dist).trigger('change').delay( 100 ) ).then(function() {
$.when( $('.upazilla-prese').val(upaz).trigger('change').delay( 100 ) ).then(function() {
$('.union-prese').val(unio).trigger('change');
});
});
});
我也试过'完成',但仍然无法正常工作。
答案 0 :(得分:2)
提取逻辑并在两个地方使用它的一般想法,其中一个执行承诺链。
function loadDistricts ($divisions) {
return $.ajax({
type: 'post',
url: 'GetDistricts',
data: {
get_option: $divisions.val()
},
success: function(response) {
$('#districts').html(response);
}
});
}
//... other methods
var $divisions = $('#divisions');
var $districts = $('#districts');
var $upazillas = $('#upazillas');
$divisions.change(function() {
$("#villtable").hide();
$("#villaddform").hide();
loadDistricts($divisions);
});
//... other change methods
$('.division-prese').val(divi);
loadDistricts($divisions).then(function(){
$('.district-prese').val(dist);
loadUpazillas($upazillas).then(function(){
$('.upazilla-prese').val(upaz);
//call next thing
});
});
答案 1 :(得分:-1)
尝试在通话前添加退货
$('#divisions').change(function() {
$("#villtable").hide();
$("#villaddform").hide();
return $.ajax({
type: 'post',
url: 'GetDistricts',
data: {
get_option:this.value
},
success: function(response) {
document.getElementById("districts").innerHTML=response;
}
});
});