имитация вызова ajax "добавить еще один элемент" в drupal 7 с помощью jquery - PullRequest
1 голос
/ 16 ноября 2011

Я пытаюсь заставить 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?Любая помощь будет принята с благодарностью ...

1 Ответ

1 голос
/ 20 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...