2011-10-30 14 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を試してみましたが、効果は同じです。 jQueryのバージョンは、代わりに、jQueryオブジェクトの()メソッドを.prevセレクタ式(文字列)を渡すべき1.6.4

答えて

2

prev方法は、セレクタではなく、jQueryオブジェクトを取ります。

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

しかし、ちょうどそれがこのケースでは、あなたを助けにはなりません。セレクタが前の要素(編集リンク)と一致しないため、空の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); 
}); 

.prev()

あります。