gpt4 book ai didi

javascript - 触发器比函数先执行?

转载 作者:行者123 更新时间:2023-11-29 23:31:15 25 4
gpt4 key购买 nike

我有一个问题。在 select 元素发生变化之前,我当前的代码不会获取数据。这就是为什么我试图在选项卡更改时强制选择(因为我的 .change 函数需要来自 selectorMRPC(); 的参数。但是我的代码不知何故 $('#selectMRPC ').trigger('change');selectorMRPC(); 先执行,我得到 mrpc undefined 的错误,即使 .trigger 在函数 selectorMRPC() 之后;

如何强制更新第一项的选择器?它需要在我运行函数 selectorMRPC();

后触发
  function selectorMRPC() {
$.ajax({
type: 'post',
url: 'IndividualSimulator',
success: function (result) {
$('#selectMRPC').empty();
JSON.parse(result).forEach(function (mrpc) {
var option = $('<option>', {
value: mrpc.name,
text: mrpc.name
});

//Persist data with option
option.data('mrpc', mrpc);
console.log(mrpc);

$('#selectMRPC').append(option);
});
},
error: function () {

}
});
return false;
}


//Execute MRPC
$('#runMRPC').click(function (e) {
e.preventDefault();
//Get data
var data = $('#mrpcData').serialize();
$.ajax({
type: 'post',
url: 'jdbcMRPC',
data: data,
success: function (result) {
//Change to result tab
showResult(result);
},
error: function (xhr) {
showError(xhr.responseText);
}
});
});


$('#selectMRPC').change(function () {
//fetch data
var mrpc = $(this).find('option:selected').data('mrpc');

$('#paramBody').empty();
for (var i = 1; i <= 10; i++) {
var field = mrpc["field" + i];

if (field !== undefined) {
var parsedField = field.split('_');
var value = parsedField[0];
var type = parsedField[1];

switch (type) {
case "S":
type = "text";
if (value === '""')
value = null;
break;
case "B":
type = "checkbox";
break;
case "N":
type = "number";
value = parseInt(value);
break;
case "D":
type = "number";
value = parseInt(value);
if (value === '""')
value = null;
break;
}
//else use checkbox
if(type === "checkbox")
{
$('#paramBody').append('<tr><td>' + i + '</td><td>' + type + '</td><td><div class="checkbox checkbox-primary">' +
'<input class="text-center" id="field'+i+'" name="Fields" type="checkbox" value="' +value + '"><label for="field'+i+'"></label></div></tr>');
}
else
{
$('#paramBody').append('<tr><td>' + i + '</td><td>' + type + '</td><td><input class="text-center" name="Fields" type="' + type + '" value="' +value + '"></tr>');
}
}
}
});


$(".next-step").click(function (e) {

var $active = $('.wizard .nav-tabs li.active');
$active.next().removeClass('disabled');
nextTab($active);

//if it's the second tab, refresh it
var liID = $('#menu').find('.active').attr('id');
if(liID === "parametersTab") {
$("#selectMRPC").val($("#selectMRPC option:first").val());
selectorMRPC();
$('#selectMRPC').trigger('change');
}

});

最佳答案

您可以从 selectorMRPC 返回 $.ajax 的结果,然后在

selectorMRPC().then(function(){
$('#selectMRPC').trigger('change');
});

或者如果触发器仍然在选择被填充之前使用回调函数

selectorMRPC(function(){
$('#selectMRPC').trigger('change');
});

关于javascript - 触发器比函数先执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47333631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com