2013-07-19 3 views
0

J'ai un problème avec la validation de mon formulaire: J'ai deux conteneurs DIV avec deux réponses. Je voudrais valider s'il y a au minimum une radio vérifiée ou s'il y a une valeur dans un élément de texte.Le sélecteur ne fonctionne pas

Mais mon sélecteur jQuery ne fonctionne pas:

HTML:

<div class="mandatory"> 
    <input type="radio" value="1" name="answer1" /> Option 1 
    <input type="radio" value="2" name="answer1" /> Option 2 
</div> 

<div class="mandatory"> 
    <input type="radio" value="1" name="answer2" /> Option 1 
    <input type="text" name="answer2" /> 
</div> 

JS:

$('.mandatory').each(function(){ 
    var elem = $(this).find('input:checked, input:text[value!=""]'); 
    console.log(elem.attr('name')); //Always "answer2" 
}); 

Il est revenu l'élément d'entrée bien qu'il soit vide. Voici mon code: http://fiddle.jshell.net/Pisi2012/n9S2Y/

Merci pour votre aide!

+0

= entrée, type = le texte et la valeur ne doivent pas être vides – alexP

+0

@Bondye: Pas exactement. Voir http://api.jquery.com/text-selector – BoltClock

+0

answer2 renvoie undefined, undefined n'est pas égal à '' – Kayo

Répondre

0

Essayez ce code:

$('.mandatory').each(function(){ 
    var elem = $(this).find('input:checked, input[type="text"][value!=""]'); 
    console.log(elem.attr('name')); //Always "answer2" 
}); 
1

Votre entrée ne comporte pas d'attribut de valeur, de sorte que le attributs matchs de sélection, comme la valeur est une chaîne vide, il n'y a qu'un pas de valeur ?

changement

<input type="text" name="answer2" /> 

à

<input type="text" name="answer2" value="" /> 

FIDDLE

+0

'[value! =" "]' Est censé correspondre ': not ([value])'. Voir http://api.jquery.com/attribute-not-equal-selector/ – BoltClock

+0

@BoltClock - eh bien, ce n'est pas le cas. Ajouter un attribut de valeur le fait fonctionner. – adeneo

+0

@BoltClock - dans les docs c'est ': not ([attr =" value "])', et s'il n'y a pas d'attribut, il ne peut pas correspondre à une chaîne vide pour la valeur, car la valeur est indéfinie – adeneo

0

Ce que je suppose est que vous avez besoin de la liste des mandatory divs, qui ne satisfait pas à la condition donnée, essayez

var els = $('.mandatory').filter(function(){ 
    var $this = $(this); 

    return !$this.find(':radio:checked').length && !$this.find(':text').filter(function(){return $.trim(this.value) != ""}).length 
}); 

Démo: Fiddle

0

Vous pouvez essayer la solution de Glyn Jones de cet autre fil:

How can I select a hidden field by value?

Il pourrait ressembler à ceci:

var elem = $(this).find('input:checked, input:text').filter(function() { $(this).val() != '' }); 
élément