-1

なぜこれが2回行われるのかわかりませんappend()

これはコールバック関数であり、ドラッグが発生した後に実行する必要があることに対応しています。(UI)

ドラッグされた div と、表示したい対応するテキストを識別するために、一連の処理が行われます (これは一種の「答えを選択し、適切なケースでドラッグ & ドロップするようなものです)。ドロップ シーケンスで:

.droppable({
    drop: function(event, ui){ //this full code below..

既存の div (display:none) の html を取得し、表示したばかりの div に追加したいと考えています。このようにして、適切なコンテンツを回答 div に挿入します。しかし、この append() は仕事を 2 回 (?) 実行し、テキストを 2 回取得します。

set_drag = function(){
    //on retire les clones inutiles
    jQuery('.cible').not('#cas1bcible, #cas2bcible, #cas3bcible, #cas4bcible').remove();

    // on garde l'img pour garder les dim du div
    jQuery('.cible > img').fadeTo(0, 0);
    jQuery('.cible').droppable({
// tout ce qui se passe si on drop
    drop: function(event, ui){
            //on récupère l'id de la forme droppée
            var forme_drag = jQuery(ui.draggable);
            var drag_id = jQuery(forme_drag).attr('id');

            //extraction du code réponse - 2 dernier caract de l'id
            var rep_num = '#rep' + drag_id.slice(-2);
            var forme_ok = jQuery(ui.draggable).attr('class');

            //Il faut afficher le texte d'accompagnement qqsoit la réponse
            //Logo et titre
            var n_texte = (drag_id).slice(-2).slice(0, -1);
            var titre_rep = '<div id="titre-rep">&nbsp;&nbsp;<img src="images/pt-logo-pnr.gif" alt="logo pnr" /><h3>Le PNR vous conseille</h3><h4>Cas ' + n_texte + '</h4></div>'
            var textID = '#txt' + n_texte;
            var le_texte = jQuery(textID).html();

            jQuery('.continuer').show();
            //on gère si ok ou pas
            if (jQuery(forme_drag).hasClass('ok')) {
                //Gestion du BON
                //affiche le coucou un peu + heut que la zone de drop
                //jQuery('#bravo').css('top', '10px').show(300);
                // affiche la réponse prévue
                jQuery('#reponses, #back-reponses').slideDown(300, function(){
                    //jQuery(rep_num).show().fadeTo('slow', 1, 'linear');
                    jQuery(rep_num).append(le_texte);
                    jQuery(rep_num).addClass('rep_ok').show().css('opacity', 1);

                });
                // insertion de la titraille
                jQuery('#reponses').append(titre_rep);

                // on rend draggable la réponse ...si on veut la bouger
                jQuery('.reponse').draggable({
                    refreshPositions: true,
                    containment: 'parent',
                    opacity: 0.65,
                    snap: false,
                    cursor: 'move',
                });

            }
            else {
                //gestion du FAUX
                // on identifie chaque réponses fausse pour faire disparaitre la forme ensuite
                jQuery(forme_drag).addClass('faux'); 

               // jQuery('#faux').css('top', '10px').show(300);
               // affiche la réponse prévue
                jQuery('#reponses, #back-reponses').slideDown(300, function(){
                    //jQuery(rep_num).show().fadeTo('slow', 1, 'linear');
                    jQuery(rep_num).append(le_texte);
                    jQuery(rep_num).addClass('rep_faux').show().css('opacity', 1);

                });

                jQuery('#reponses').append(titre_rep);
                jQuery('.reponse').draggable({
                    refreshPositions: true,
                    containment: 'parent',
                    opacity: 0.65,
                    snap: false,
                    cursor: 'move',

                });

            }

        }
    });
4

1 に答える 1

0

append() 命令を if/else ステートメントの外に移動して、意図したとおりに動作するようにしました。

(???)

私の場合、追加されるtxtは最終的にこのテストに依存せず、その直後にも実行できるため、問題ありませんが、奇妙なままです。

于 2011-10-25T10:04:02.570 に答える