2011-10-30 5 views
0

J'ai simplement le code HTML:Comportement étrange jQuery .PREV()

<input type='hidden' name='cat_id' value='123'/> 
<a href='#' class='edit'>Edit</a> 
<a href='#' class='delete delete-link'>Delete</a> 

et simple code JS:

$("a.delete-link").click(function() { 
var id = $(this).prev($('input[name="cat_id"]')).val(); 
    alert(id); 
}); 

Tout simple et évident, obtenir une valeur d'entrée précédente avec le nom « cat_id '. Mais il retourne juste une chaîne vide (la valeur est vraiment définie). Je pensais que peut-être le sélecteur est faux:

var id = $(this).prev($('input[name="cat_id"]')).length; 
alert(id); 

Retours 1. De travail. Je n'ai pas la moindre idée de ce qui se passe et essayé

var id = $(this).prev($('input[name="cat_id"]')).attr('name'); 
alert(id); 

Returns « undefined ». Étrange. Des idées? Essayé prevAll au lieu de prev, l'effet est le même. Version jQuery est 1.6.4

Répondre

2

La méthode prev prend un sélecteur, pas un objet jQuery:

var id = $(this).prev('input[name="cat_id"]').val(); 

Cependant, tout cela ne vous aidera pas dans ce cas. Comme le sélecteur ne correspond pas à l'élément précédent (le lien d'édition), vous obtiendrez un objet jQuery vide et val ne renverra pas l'identifiant.

Vous pouvez utiliser la méthode siblings ou prevAll pour trouver l'élément:

var id = $(this).siblings('input[name="cat_id"]').val(); 
3
$("a.delete-link").click(function() { 
var id = $(this).prev('input[name="cat_id"]').val(); 
    alert(id); 
}); 

.prev()

Vous devez passer dans l'expression de sélecteur (chaîne) à la méthode .PREV() à la place d'un objet jQuery.