2010-07-30 4 views
4

Comment faire une sélection sur une sélection existante dans jQuery? Ce est le HTML donnéjQuery comment spécifier un sélecteur existant

<div id='search'> 
    <form action='' method='GET'> 
     <input id="searchbutton" type='submit' name='qs' value='search'> 
      <div id="searchoptions"> 
       <input type="checkbox" checked="checked" id="search_books book" name="search_books" value="1" /><label for="search_books">book</label> 
       <input type="checkbox" checked="checked" id="search_movies movie" name="search_movies" value="1" /><label for="search_movies">movies</label> 
      </div> 
    </form> 
</div> 

La partie jQuery:

$('#search').each(function(){ 
    //do stuff 
    $(this).click(function(){ 
     alert('checkbox clicked'); 
    }); 
}); 

de malédiction la fonction clic déclenche si le div obtient cliqué. Mais je voudrais qu'il se déclenche si la case est cochée. Je pourrais juste faire $ ('# entrée de recherche: case à cocher') mais j'ai besoin de faire quelque chose aveC#search en premier. Alors, comment ajouter un sélecteur à $ (this)?

par exemple. $ (this'input: checkbox ')

Désolé, c'est une question de fous.

Répondre

2

Vous utilisez .find() dans ce cas, par exemple:

$(this).find(':checkbox'); 
//equiavlent to $('#search :checkbox') 

Il y a beaucoup d'autres tree traversal methods comme cela aussi.

Vous pouvez également faire: $(':checkbox', this) mais c'est vraiment juste converti au ci-dessus par jQuery sous les couvertures, donc mieux de le faire vous-même IMO.

-1

utilisez vos méthodes parent() et children(). Vous pouvez spécifier des sélecteurs en tant qu'arguments.

$(this).children(':checkbox'); 
+1

Utiliser '.children()' ne fonctionnera pas dans cette situation parce qu'il ne regarde que les descendants immédiats. Pour regarder plus profond, vous avez besoin de '.find()'. – user113716

1

Utilisez .find(). Sur une autre note, il n'y a pas de raison d'utiliser .each() sur $('#search') car ce sélecteur ne retournera qu'un seul élément, puisque les ID d'élément HTML doivent être uniques.

+0

+1 - Bon point sur l'utilisation de '.each()' contre un sélecteur d'ID. – user113716

+0

Je ne suis pas d'accord avec le fait que l'utilisation de '.each()' ait quelque chose à voir avec le nombre d'éléments de l'ensemble. En fait ce n'est pas vraiment lié à IMO, puisque '.bind()' (ou à peu près n'importe quelle fonction) fonctionne sur plusieurs éléments, mais même dans un seul élément vous pouvez toujours avoir besoin d'un '.each()', par exemple: '$ (" # ID "). Each (function() {$ (this) .plugin ({text: this.href});});' –

+0

Je pense que la raison pour laquelle OP utilise each() est parce que comme il dit "...J'ai besoin de faire quelque chose aveC#search first ", et c'était leur façon de le mettre en place.Mais vous avez raison, chacun sur un sélecteur d'ID n'est généralement pas vraiment nécessaire .. – Psytronic

1

Définissez une variable pour contenir votre jeu de résultats.

var $myVar = $('#search'); 

Ensuite, utilisez la méthode .add().

$myVar = $myVar.add($('#search input:checkbox')); 
$myVar.click(function(){ 
    alert('div or checkbox clicked'); 
}); 
0

Vous pouvez utiliser le paramètre

$(":checkbox", $(this)); 

où le second est le contexte sur lequel rechercher des éléments qui correspondent au sélecteur.

Alors

$(":checkbox", $(this)).click(function(){ 
    alert('checkbox clicked'); 
});