Триггерное событие jQuery становится потерянным - PullRequest
0 голосов
/ 30 апреля 2018

Я столкнулся с проблемой, которую могу решить, используя грубую задержку, и мог бы также решить, могу ли я получить обратный вызов от вызова 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);

Кто-нибудь знает, как я могу это исправить, пожалуйста?

...