2011-10-30 4 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); 

반환 노력'정의되지 않았다 '. 이상한. 어떤 아이디어? prev 이전에 시도한 것이 아니라 효과가 동일합니다. jQuery를 버전은

답변

2

prev 방법은 아닌 jQuery를 오브젝트 선택기를합니다. 선택기가 이전 요소 (편집 링크)와 일치하지 않으므로 빈 jQuery 객체를 가져오고 val은 id를 반환하지 않습니다.

당신은 요소를 찾기 위해 siblings 또는 prevAll 방법을 사용할 수 있습니다 :

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); 
}); 
1.6.4

.prev()

당신은 jQuery를 객체 대신에) (.prev하는 선택 식 (문자열)의 방법을 전달해야합니다.

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

그러나, 단지이 경우 도움이되지 않습니다 :