Я столкнулся с проблемой, которую могу решить, используя грубую задержку, и мог бы также решить, могу ли я получить обратный вызов от вызова jQuery, и мне было интересно, есть ли у кого-нибудь еще понимание этой проблемы.
Вот код:
/*
* Now fill the fields then lastely selecte the Select2 List value to display selected task
*/
for (var i = 0; i < numMilestoneTasks; i++) {
$($(".ctaskSelector")[i]).val(taskData[i].task_ID).trigger('change');
$($(".project_task_ID")[i]).val(taskData[i].project_task_ID )
$($(".task_allocated_hours")[i]).val(taskData[i].allocated_hours )
$($(".task_start_date")[i]).val(taskData[i].start_date );
$($(".task_end_date")[i]).val(taskData[i].end_date );
$($(".task_tag_info")[i]).val(taskData[i].tags );
}
Теперь это работает так, что у меня есть выпадающий список Select2, который называется .ctaskSelector
, который был предварительно заполнен, скажем, 5 опциями, а тот, который я хочу отобразить, запускается командой:
$($(".ctaskSelector")[i]).val(taskData[i].task_ID).trigger('change');
Как видите, в выпадающем списке numMilestoneTasks
select2. Проблема в том, что цикл настолько быстр, что активируется только первая опция select2, а триггер теряется на остальных. Я могу заставить его работать, замедляя его, as with the code below
. Это также работает, если цель является чистым текстовым полем ввода, следовательно, это может быть проблема select2. Какой-то другой метод, такой как обратный вызов, был бы идеальным, но я не понимаю, как это сделать.
setTimeout(function() {
for (var i = 0; i < numMilestoneTasks; i++) {
$($(".ctaskSelector")[i]).val(taskData[i].task_ID).trigger('change');
$($(".project_task_ID")[i]).val(taskData[i].project_task_ID )
$($(".task_allocated_hours")[i]).val(taskData[i].allocated_hours )
$($(".task_start_date")[i]).val(taskData[i].start_date );
$($(".task_end_date")[i]).val(taskData[i].end_date );
$($(".task_tag_info")[i]).val(taskData[i].tags );
}
}, 100);
Кто-нибудь знает, как я могу это исправить, пожалуйста?