2011-10-30 187 views
0

我有简单的HTML代码:奇怪的jQuery .prev()行为

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

而且简单的JS代码:

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

一切都简单明了,获得先前输入的名称为值“CAT_ID ”。但它只是返回一个空字符串(值是真正定义的)。我想也许选择是错误的:

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

退货1.工作。 我只是没有什么线索”发生的事情,并试图

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

返回‘不确定’。奇怪。有任何想法吗?尝试prevAll而不是prev,效果是一样的。 jQuery的版本是1.6.4

回答

2

prev方法需要一个选择,而不是一个jQuery对象:

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

然而,只是不会帮助你在这种情况下。由于选择器与前一个元素(编辑链接)不匹配,您将得到一个空的jQuery对象,并且val不会返回该ID。

可以使用siblingsprevAll方法找到的元素:

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()

你应该在选择表达(字符串)传递给.prev()方法,而不是一个jQuery对象的。