J'ai une entrée de bouton FAPI de base qui est activée #ajax et qui fonctionne bien, mais je veux ajouter un JS "Êtes-vous sûr?" une fenêtre de confirmation lorsque vous cliquez sur le bouton avant que le code ne s'exécute réellement, et je ne sais pas comment le faire parce que le JS de FAPI semble manger le clic avant que je puisse y arriver, peu importe ce que je fais.
J'ai essayé d'ajouter un gestionnaire onclick en ligne, comme ceci:
$form['search_filters']['channels']['channel_delete_' . $channel->nid] = array(
'#type' => 'button',
'#name' => 'channel_delete_' . $channel->nid,
'#value' => 'Delete',
'#attributes' => array(
'class' => array('confirm'),
'onclick' => "return confirm('Are you sure you want to delete that?')"
),
'#button_type' => 'no-submit',
'#ajax' => array(
'callback' => 'delete_channel_callback',
'wrapper' => 'channel_container_' . $channel->nid
),
);
... ce qui n'aide pas, et j'ai également essayé d'ajouter:
$('.confirm').click(function(e) {
e.preventDefault();
alert('Is this recognized')? // never runs
});
dans le JS de mon module qui est également ignoré.
D'autres idées? Existe-t-il un moyen d'ajouter un gestionnaire de soumission en haut de la pile que Drupal #ajax reconnaîtra?
la source
$('.confirm').unbind('click');
) ... ou ai-je mal lu? désolé pas familier avecunbind
confirmant que Jeroen corrige le code de googletorp.
Cependant, j'ai moi-même découvert que les égalités de type "mousedown" doivent être débidées et reliées à nouveau. Donc, le morceau de code qui a fonctionné pour moi est le suivant:
la source
La question est ancienne, mais je m'y intéressais aussi. À mon avis, le moyen le plus simple consiste à utiliser l'événement click dans votre définition Ajax, car Drupal utilise l'événement mousedown par défaut:
Ensuite, il vous suffit d'ajouter un
.mousedown()
événement à votre bouton dans votre fichier Javascript, car il est déclenché avant l'événement click:Si vous souhaitez toujours que votre demande Ajax soit appelée avec l'événement mousedown, vous pouvez utiliser un événement personnalisé:
Ensuite, vous pouvez déclencher cet événement dans le
.mousedown()
cas de votre fichier Javascript:Les deux versions fonctionnent!
la source
preventDefault
dans mon gestionnaire de clics pour empêcher la soumission normale (non-js) du formulaire, encore.Avez-vous essayé d'exécuter votre JS dans un comportement Drupal? Il se peut que votre gestionnaire de clics soit attaché après celui de Drupal.
Quoi qu'il en soit, vous devriez pouvoir dissocier le gestionnaire de clics de Drupal sur le bouton afin que vous soyez appelé en premier et vous pouvez appeler le gestionnaire de clics Ajax de Drupal manuellement (et conditionnellement).
la source
Répondre à noter que le code de googletorp n'est pas correct à 100%.
Vous devez changer la ligne où les événements sont stockés en ceci:
De cette façon, vous éliminez tous les problèmes de référence d'objet, donc lors de la dissociation des événements de clic, cela ne se dissocie pas également dans votre var;)
Sachez également que depuis jQuery 1.8, la méthode .data () est obsolète. L'obtention des données d'événements se fait désormais via une structure de données interne:
Source: http://blog.jquery.com/2011/11/08/08/building-a-slimmer-jquery/
la source
J'ai trouvé de nombreuses réponses utiles ci-dessus et j'ai réussi à faire fonctionner mon formulaire. Dans l'ensemble, voici ce qui a fonctionné pour mon application: un bouton de suppression de formulaire avec une boîte de dialogue de confirmation et un rappel AJAX pour modifier le contenu d'une liste de sélection.
Le javascript:
L'élément de formulaire (liste de sélection) à modifier:
Le bouton:
Et enfin, le rappel AJAX:
la source
J'ai corrigé cela en modifiant le fichier drupal misc / ajax.jx.
Créez une copie du fichier ajax.js et mettez-le dans n'importe quel module personnalisé et
Drupal.ajax = function (base, element, element_settings) {
modifiez la fonction dans beforeSend:Cela fonctionne bien pour moi.
la source
Peut-être un peu vieux, mais je me demande pourquoi nous ne pouvons pas simplement utiliser:
la source