2010-10-26 3 views
0

Utilisation de l'interface utilisateur Jquery pour créer un formulaire où, lorsque vous faites glisser une image vers une entrée, le texte alt est analysé en tant que valeur de l'entrée. J'ai ce travail bien pour 1 image mais, je veux faire en sorte qu'il tire pour l'image actuelle (de sorte que je ne dois pas spécifier les ID de toutes les images). Voir le script ci-dessous:Jquery - Recherche d'un texte alternatif pour l'image actuelle

<script>  
    $(function() { 
    var teamname = $(".helmet").attr("alt"); 

     $("#draggable").draggable(); 
     $("#draggable2").draggable(); 
     $("#droppable").droppable({ 
      drop: function(event, ui) { 
       $(this) 
        .find("input") 
         .val("" + teamname + ""); 
       } 
     }); 
     $("#droppable").droppable({ 
      out: function(event, ui) { 
       $(this) 
        .find("input") 
         .val(" "); 
       } 
     }); 
    }); 
    </script> 

Et voici le HTML

<div id="draggable" class="ui-widget-content"> 
    <img src="team1.jpg" alt="Team Name 1" class="helmet"> 
</div> 

<div id="draggable2" class="ui-widget-content"> 
    <img src="team2.jpg" alt="Team Name 2" class="helmet"> 
</div> 

<div id="droppable" class="ui-widget-header"> 
    <input type="text" name="team" /> 
</div> 

En ce moment, si je fais glisser la première ou deuxième image, son seul saisissant le texte alt de la première image. Toute aide serait grandement appréciée.

Répondre

2

Modifier cette fonction, oh et vous pouvez ajouter la fonction out avec elle:

$("#droppable").droppable({ 
    drop: function(event, ui) { 
     $(this) 
      .find("input") 
       .val("" + ui.helper.find('img').attr('alt') + ""); 
    }, 
    out: function(event, ui) { 
     $(this) 
      .find("input") 
       .val(" "); 
    } 
}); 

définissant teamname en dehors de la fonction largable définit sa définition à la première .helmet qu'il trouve.

+0

@fudgey - Alors, je l'ai fait et maintenant aucune des images n'est déplaçable. – Batfan

+1

Opps, désolé .. J'ai dû changer la fonction de baisse un peu ... voici une "démo" sans les images - http://jsfiddle.net/Mottie/EhUNN/2/ – Mottie

+0

@fudgey - Génial, ça marche :) Juste une autre question rapide, est-il un moyen de faire fonctionner l'option 'Revert' en conjonction avec l'option 'out'? Par exemple, si l'utilisateur fait glisser une image sur l'entrée et change d'avis, je voudrais qu'il soit capable de faire glisser l'entrée hors de la boîte et de la faire revenir à sa position par défaut (tout en supprimant la valeur qu'elle a saisie – Batfan

1

Étant donné que vous avez plusieurs éléments déplaçables, les choses sont plus faciles lorsque vous utilisez une classe au lieu d'un ID.

<div class="ui-widget-content draggable"> 
    <img src="team1.jpg" alt="Team Name 1" class="helmet"> 
</div> 

<div class="ui-widget-content draggable"> 
    <img src="team2.jpg" alt="Team Name 2" class="helmet"> 
</div> 

<div id="droppable" class="ui-widget-header"> 
    <input id="team-name" type="text" name="team" /> 
</div> 

<script type="text/javascript"> 
$(function() { 

    $.each($(".draggable"), function() { $(this).draggable(); }); 

    $("#droppable").droppable({ 

     drop: function(event, ui) { 
      $("#team-name").val($("img", ui.draggable).attr('alt')); 
     }, 

     out: function(event, ui) { 
      $("#team-name").val(""); 
     } 
    }); 
}); 
</script> 
+0

Votre exemple a également rendu mes objets déplaçables non-déplaçables. – Batfan

+1

@Batfan: Ah oui, les sources de l'image ont changé. C'est corrigé maintenant. Mais vous devez également copier la partie HTML avec div-s car c'est un peu différent de l'original. – Saul

Questions connexes