2009-10-18 14 views
2

je la structure de tableau suivant:Comment sélectionner div dans la cellule de table en utilisant jQuery

  <tr> 
       <th><label for="ctl00_bodyContent_username">username:</label></th> 
       <td class="field"><input name="ctl00$bodyContent$username" type="text" id="ctl00_bodyContent_username" /></td> 
       <td class="info"> 
        <div class="message">what do you want to be known as?</div> 
        <div class="valid">username available</div> 
        <div class="invalid">this username is already taken</div> 
       </td> 
      </tr> 

Ce que je cherche à atteindre est quand la zone de texte # ctl00_bodyContent_username a le focus, te div .message est affiché (par défaut est display: none) dans la cellule de tableau adjacente.

+0

+1 pour la question et pour de bon, HTML accessible! –

Répondre

1

hypothèse où il y a plus d'un d'entre eux (et pas seulement un comme l'autre partons du principe):

$("td.field :input").focus(function() { 
    var info = $(this).parent().next(); 
    if ($(".valid:visible, .invalid:visible", info).length == 0) { 
    info.children("message").show(); 
    } 
}).blur(function() { 
    var info = $(this).parent().next(); 
    info.children("message").hide(); 
}); 

Cela suppose également que vous voulez cacher le message lorsque le le champ perd son focus.

+0

Cette pensée m'a traversé l'esprit aussi, mais à en juger par le contenu, il semble que la * table * est un formulaire d'inscription de l'utilisateur –

+0

@Russ http://careers.stackoverflow.com/ utilise un formulaire d'entrée qui a un message sur chaque rangée.Je suis avec Cletus qu'il cherche quelque chose comme ça. – bendewey

+0

@cletus vous devriez chaîner le focus et brouiller les appels afin qu'ils ne chargent pas le sélecteur deux fois. – bendewey

2
$("#ctl00_bodyContent_username").focus(function(){ 
    $(".message").show(); 
}) 

Permettez-moi de vous donner une brève information sur Show() Méthode:

Comme show (vitesse, [rappel]) sans animations. Ne change rien si les éléments sélectionnés sont tous visibles. Peu importe si l'élément est masqué via un appel hide() ou via un affichage: none dans une feuille de style.

De: JQuery Effects

+0

-1 Malheureusement, cela ne fonctionnera pas si vous avez plus d'une rangée. Il affichera des messages sur toutes les lignes. – bendewey

+0

Eh bien, cela fonctionnera à moins que vous n'ajoutez pas plus d'une ligne qui ont les mêmes noms et c'est ce que ce gars demande à propos de :) – Tarik

+0

Ouais, désolé les gars. Je devrais avoir réalisé que ne poster qu'une seule ligne causerait des problèmes. J'ai environ 5/6 de ces rangées avec les mêmes classes. – sparkymark75

0

Essayez ceci:

$("#ctl00_bodyContent_username").focus(function(){ 
    $(this).parent().next().children('.message').show(); 
}) 

parent

Obtenez le parent direct d'un élément. S'il est appelé sur un ensemble d'éléments, parent renvoie un ensemble de leurs éléments parent directs uniques.

suivant

Obtenez un ensemble d'éléments contenant les frères et sœurs uniques de chacun des prochains l'ensemble donné d'éléments.

enfants

obtenir un ensemble d'éléments contenant tous les enfants immédiats uniques de chacun de l'ensemble assorti d'éléments.

montrent

Affiche chacun l'ensemble des éléments adaptés si elles sont cachées.

Voir traversing dans les documents jQuery pour plus d'informations.