11
votes

JQuery Accordion: prévenir le volet d'ouvrir / annuler l'événement ChangestArt

J'ai le marquillage suivant:

$("#accordion").accordion({
    header: "h3",
    fillSpace: true,
    changestart: function(event, ui) {
        if (someConditionIsTrue()) {
            event.stopPropagation();
            event.preventDefault();
            return (false);
        }
    }
});


0 commentaires

10 Réponses :


1
votes

J'ai trouvé une solution de contournement qui fonctionne dans mon contexte - j'évite de devoir annuler complètement l'événement en désactivant simplement les en-têtes H3 (après leur avoir donné un identifiant) si nécessaire:

HTML: P>

if (someConditionIsTrue()) {
    $("#relationshipsHeader").attr("disabled", "disabled");
    // and so on...
}


0 commentaires

10
votes

$ ("# accordéon .h3"). UNBIND ("Cliquez sur");

fonctionne pour moi.


1 commentaires

N'est-ce pas $ ("# accordéon h3"). Unbind ("cliquer"); ???? Reportez-vous à jsfiddle.net/aravindtri/sdqf2



3
votes

J'ai déposé une demande d'amélioration pour cela: Ticket 6651 .


0 commentaires

7
votes

Avant Initing Accordion, ajoutez votre gestionnaire de clic personnalisé avec votre logique. stopimmediatepropagation arrêtera l'événement avant accordéon manutention sera appelé. xxx


1 commentaires

Je viens d'ajouter "this.option.disableabled = true;" au lieu de "E.StopimMédieIadiatePropagation ();" ce qui fonctionne vraiment bien.



-1
votes

Bien qu'il existe une réponse similaire de User438316, il a trop besoin de code inutile, renvoie false code> étant un jarring évident ... Que diriez-vous de:

$('#accordion .deleted').click(function(e) {      
    e.stopImmediatePropagation();
});    
$('#accordion').accordion();


1 commentaires

Retour Faux a un but, il a également été utilisé par l'auteur de la question.



0
votes

J'avais besoin d'une dérivation de ce comportement parce que j'étais enchaînant dragge et accordéon. Je mettais ma solution ici pour que quiconque cherche la même solution.

Le comportement que j'essayais d'éviter de déclencher un changement d'accordéon après avoir glissé lorsque les en-têtes sont la poignée de l'accordéon et de l'amplification. Donc, chaque fois que vous faites glisser, il s'effondre la section de contenu actuellement expansée. P>

HTML: P>

$container.append($controls)
.draggable({
    handle: ':header',
    start: function(event, ui) {
        $(event.toElement).addClass('ui-dragging');
    }

});
$container.find(':header').click(function (event) {
    var $this = $(this);
    if ($(this).hasClass('ui-dragging')) {
        event.stopImmediatePropagation();
        $this.removeClass('ui-dragging');
    }
});
$container.accordion({
    collapsible: true,
    header: ':header'
});


0 commentaires

0
votes

Je crée le contenu de l'accordéon de manière dynamique, alors contraignant l'appel de l'événement avant que l'accordéon ne soit généré ne fonctionne pas pour moi. J'ai donc essayé de contraignant la startimmediatepropagation après la création de l'accordéon et qui a travaillé pour moi.


0 commentaires

0
votes
$("#accordion h3").unbind("click");
Refer
jsFiddle-accordion

0 commentaires

1
votes

Ce sont quelques années après que la question a été posée à l'origine et que j'utilise JQuery-UI 1.11.2, cela n'aurait donc pas été une réponse valide.

Mais c'est ce que j'ai trouvé pour travailler le mieux: < / p>

  1. Donnez d'abord l'en-tête que vous souhaitez désactiver l'identifiant désactiver_this ou trouver une autre façon, vous pouvez sélectionner l'en-tête correspondant.
  2. Ajoutez ensuite cette ligne de code XXX

    Certaines méthodes mentionnées dans des réponses antérieures ( Bidind ("Cliquez sur") et E.StopimmediateIadiateIadiateIadiate () ) a travaillé pour moi dans le sens limité qu'ils ont empêché l'ouverture du panneau lorsque l'en-tête a été cliqué. Mais ma méthode présente 2 avantages supplémentaires:

    • arrête l'en-tête en prenant sur un style en surbrillance lorsqu'il clique sur.

    • donne l'en-tête un style désactivé.

      beaucoup plus convivial.


0 commentaires

1
votes

Peut-être qu'il est disponible dans l'aîné Jqueryuis, mais si vous utilisez JQuery-UI 1.9.2 ou plus récent, vous pouvez désactiver l'accusé d'effondrement de l'accordéon dans l'événement Beforeactiver;

beforeActivate: function (event, ui) {
    event.preventDefault();
}


0 commentaires