2010-01-21 4 views
2

J'essaie d'obtenir le dernier élément de champ à se concentrer lors d'un 'ajouter un autre élément' sur un champ de valeur multiple CCK.Drupal CCK ajouter un autre rappel callback

Voici mon code:

$("#node-form table.content-multiple-table tr.draggable input[type='text']").live("keydown", function (e) { 
    if (e.which == 13) { 
    $(this).closest("table.content-multiple-table").siblings("div.content-add-more").find("input.form-submit").mousedown(); 
    $(this).closest("tr.draggable").next().find("input[type='text']").trigger("focus"); 
    return false; 
    } 
}); 

Il est clair que cela ne fonctionne pas parce que le champ est créé sur la réponse de AHAH. :(

Quelqu'un sait comment crochet dans la réponse à concentrer le dernier champ Merci

Répondre

3

Vous devez utiliser Drupal.behaviors et Drupal devez gérer la fixation des comportements pour vous des modules redéfinissez exécuter ces après avoir modifié les DOM (y compris les demandes de AHAH).

Dans votre cas, vous voulez probablement ajouter deux comportements, l'un sur le bouton pour signaler qu'il a été pressé et un autre sur le dernier champ de se concentrer si la Le drapeau est activé (et le drapeau est désactivé)

+0

Merci, je l'essaie. – Jourkey

1

En regardant le code source de CCK/includes/content.node_form.inc, et plus précisément cette partie dans les content_add_more_js fonction:

// Build our new form element for the whole field, asking for one more element. 
    $form_state['item_count'] = array($field_name => count($_POST[$field_name]) + 1); 
    $form_element = content_field_form($form, $form_state, $field); 
    // Let other modules alter it. 
    drupal_alter('form', $form_element, array(), 'content_add_more_js'); 

Je dirais que vous aurez besoin de configurez un hook_form_alter où le form_id est 'content_add_more_js', car il semble que ce soit appelé après avoir généré le nouveau champ, mais avant de l'ajouter à la page.

Je n'ai pas essayé encore si ...


// Oussama Mubarak Semiaddict

0

J'avais un problème similaire (en D6, peut être différent pour D7). La clé remplace

jQuery(document).ready(function(){ 
//your stuff happens 
}); 

avec:

Drupal.behaviors.myModuleBehavior = function (context) { 
//your stuff happens 
}; 
Questions connexes