2010-05-20 4 views
1

J'ai une table layed comme ceci:Sélectionnez l'entrée cachée à l'intérieur suivant td [jQuery]

 <td> 
       somename 
     </td> 
     <td class="hoverable value" > 
       somevalue 
     </td> 
     <td class="changed"> 

     </td> 
     <td class="original value"> 
      <input type="hidden" value="somevalue" /> 
     </td> 

Et ce que je suis en train de faire est, je Survoler la hoverable td qui se transforme en un zone de texte. Une fois que je suis sorti, je veux vérifier le champ caché pour sa valeur d'origine et mettre une image si les 2 sont différents les uns des autres. J'ai déjà ceci:

$(document).ready(function() { 
    var newHTML = ''; 

    $('table td.hoverable').hover(
    function() { 
     var oldHTML = $(this).html().trim(); 
     $(this).html('<input type=\'text\' value=\'' + oldHTML + '\' size=\'' + ((oldHTML).length + 2) +'\' />'); 
    }, 
    function() { 
     newHTML = $('input', this).val(); 
     var oldHTML = $(this).next('td.original').children('hidden').val(); 
     if(newHTML != oldHTML) { 
      $(this).next('td.changed').html('Changed'); 
     } 
     $(this).html(newHTML); 
    }) 
}); 

mais cela ne fonctionne pas. Ce qui échoue, apparemment, c'est de saisir la valeur du champ caché, et j'ai essayé de le sélectionner de différentes manières, mais je ne peux pas y arriver. Toutes les idées ou conseils sont grandement appréciés;)

Répondre

5

Vous devez utiliser .n extAll()

var oldHTML = $(this).nextAll('td.original').find('input:hidden').val(); 

Pourquoi? Parce que .next() prend l'élément suivant et voit si elle correspond au sélecteur. Si vous utilisez .nextAll() vous obtenez l'élément suivant qui correspond au sélecteur.

+0

fonctionne comme un charme! Merci beaucoup! Bon de savoir la différence. – Fverswijver

+0

La documentation de jQuery indique que .next() fonctionne exactement de cette façon, mais pas d'une manière intuitive. Ce comportement m'a jeté quand j'ai essayé de faire exactement la même chose récemment. – ICodeForCoffee

1

Essayez

$(this).next('td.original').find('input:hidden').val(); 
+0

Non, il continue de retourner 'indéfini' – Fverswijver

+0

Cela n'a peut-être pas aidé à résoudre le problème d'origine, mais cela m'a aidé avec un problème de syntaxe. Merci. – madcolor

0
var oldHTML = $(this).next('td.original').children(':hidden').val(); 
+0

renvoie également 'undefined' – Fverswijver

0

Replace

var oldHTML = $(this).next('td.original').children('hidden').val(); 

Avec

var oldHTML = $(this).next('td.original').find('input:hidden').val();