имитация добавления другого элемента ajax-вызова в drupal 7 с использованием jquery

Я пытаюсь заставить jQuery отправить событие mousedown кнопке Drupal 7 «добавить другой элемент» для поля с несколькими значениями, а затем дождаться завершения вызова ajax, прежде чем заполнять эту новую пустую строку данными из элемента в объект jQuery (который имеет несколько элементов). Мне нужно использовать цикл для циклического перебора элементов (ингредиентов) в этом объекте jQuery, но независимо от того, что я пытаюсь сделать, моя страница умирает...

В настоящее время у меня есть что-то вроде следующего:

i = 0;
ingredients = newHtml.find('.recipe_ingredients > li');
ingredientsLength = ingredients.length;

$('#edit-field-ingredients-und-add-more').mousedown();

while(i < ingredientsLength) {
    if ( document.readyState !== 'complete' ) {
        // code to fill in the new blank row with data from 'ingredients'
        $('#edit-field-ingredients-und-add-more').mousedown();
        i++;
    }        
}

Поскольку я еще не знаю, как выполнить вызов ajax самостоятельно с помощью jQuery (или с помощью Drupal), я пытался просто проверить, завершен ли вызов, используя .readyState и другие методы, подобные взлому. Я просто не уверен, что попробовать дальше!

Я иду об этом совершенно неправильно? Есть ли простой способ сделать ajax-вызов многозначного поля «добавить другой элемент» с помощью jQuery? Любая помощь будет принята с благодарностью...


person beuner    schedule 16.11.2011    source источник


Ответы (1)


Я не уверен, что в Drupal 7 есть лучший способ, но в Drupal 6 вы можете использовать jQuery(document).ajaxComplete со свойством settings.url, чтобы узнать, когда закончился конкретный щелчок «Добавить другой элемент».

Начните с:

(function($) {
    $(document).ajaxComplete(function(e, xhr, settings)
    {
        alert(settings.url);
    });
}(jQuery));

После того, как вы определили правильный settings.url для своего поля, измените его на:

(function($) {
    $(document).ajaxComplete(function(e, xhr, settings)
    {
        if (settings.url == "the path from step 1") {
            // Code to populate your fields here
        }
    });
}(jQuery));

И вуаля!

Вы можете прочитать страницу Джея Матвичука где я изначально изучил эту технику некоторое время назад. Вся заслуга в нем (и nclavaud для его комментария), действительно.

person feedbackloop    schedule 20.11.2011
comment
Вау, я искал что-то подобное повсюду! Спасибо, это работает! - person beuner; 22.11.2011