2010-09-09 3 views
1

J'ai une boucle qui crée un flux de données pour un appel ajax. Voici le code:Recherche de toutes les entrées sélectionnées dans une boucle à l'aide de jQuery

$(':input','#texes-test-entry-0').not(':button, :submit, :reset, :hidden').each(function(){ 
     varStr = $(this).attr("id").split('-'); 
     dataString = dataString + '&' + varStr[1] + '=' + $(this).val(); 
    }); 

Pour toutes les entrées de texte $ (this) .val() me reçoit la valeur que j'ai besoin, mais pour les entrées de sélection, je ne suis pas besoin de la valeur de texte, mais la valeur de l'option sélectionnée.

Comment attraper les entrées de sélection et les traiter différemment?

Merci

Répondre

0

Vous n'avez pas besoin de traiter des éléments de sélection différemment, la méthode val obtiendra la valeur sélectionnée à partir de la sélection.

Exemple:

<script type="text/javascript"> 
$(function(){ 
    var data = []; 
    $(':input','#texes-test-entry-0').not(':button, :submit, :reset, :hidden').each(function(){ 
    varStr = $(this).attr("id").split('-'); 
    data.push(varStr[1] + '=' + $(this).val().replace(/%/g,'%37').replace(/&/g,'%38')); 
    }); 
    var dataString = data.join('&'); 
    alert(dataString); 
}); 
</script> 

<form id="texes-test-entry-0"> 
    <input type="text" id="x-id1" value="as%&df" /> 
    <select id="x-id2"> 
    <option value="1">one</option> 
    <option value="2" selected="selected">two</option> 
    <option value="3">three</option> 
    </select> 
</form> 

Sortie:

id1=as%37%38df&id2=2 
+0

J'ai compris cela. J'avais quelque chose d'autre qui ne va pas. :-) Sur une autre note pourriez-vous expliquer la raison de deux choses: 1. Pourquoi utilisez-vous les méthodes push et join au lieu de simplement créer la chaîne. 2. Pourquoi avez-vous utilisé les deux méthodes de remplacement. J'essaie d'apprendre ici, donc si les réponses sont évidentes, s'il vous plaît humour moi. –

+0

@resonantmedia: Créer des chaînes séparées puis les assembler est plus efficace que d'utiliser + = pour créer une chaîne. Chaque fois que vous utilisez + = vous créez une nouvelle chaîne qui se développe à chaque fois, donc au moment où vous avez terminé, vous avez déplacé beaucoup plus de données que ce qui se trouve dans la chaîne finale. Les appels de remplacement sont pour l'URL codant les caractères% et &, qui rompra le résultat s'ils sont laissés inchangés. – Guffa

0

Essayez de mettre un si à l'intérieur de la boucle qui sélectionne toutes les entrées et vérifier si l'élément courant a l'option, si oui, ne traitent pas.

if($(this).has('option')) 
{ 
<ignore> 
} 
else 
{ 
<process> 
} 
+0

qui retourne encore les deux entrées de sélection et texte. D'autres idées? –

+0

Comment une entrée de texte peut qualifier le if ??? –

Questions connexes