使用jquery在drupal 7中模拟“添加另一个项目”ajax调用

时间:2011-11-16 13:55:39

标签: ajax drupal jquery while-loop

我正在尝试让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++;
    }        
}

因为我还不知道如何使用jQuery(或使用Drupal)自己发出ajax调用,我一直试图通过使用.readyState和其他类似hack的方法来检查调用是否已经完成。我只是不确定下一步该尝试什么!

我是否以完全错误的方式解决这个问题?是否有一种直接的方法来使用jQuery进行“添加另一项”多值字段ajax调用?任何帮助将不胜感激......

1 个答案:

答案 0 :(得分:1)

我不确定Drupal 7中是否有更好的方法,但是在Drupal 6中,您可以使用jQuery(document).ajaxCompletesettings.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));

瞧!

你可能想阅读the page by Jay Matwichuk我最初学习这种技术的地方。所有这些都归功于他(以及nclavaud在那里的评论),真的。