JQuery-Selector $(this).next(“input [name ='foo']”)不起作用

时间:2013-08-13 07:51:34

标签: jquery jquery-selectors

我想对价值变化的.change()做出反应。在这种情况下,必须更新其他(隐藏)字段。

<input type="text" name="n1"><br>
<input type="text" name="n2"><br>
<input type="text" name="n3"><br>    
<input type="hidden" name="h1"><br>
<script>
$("input[type='text']").change( function() {

 try {
     $temp = $(this).next("input[type='hidden']");
 } catch (e) { // just for testing
     alert("not found "+e);
} 
 try {    
     $temp = $(this).next("input[name='h1']");
} catch (e) { { // just for testing
     alert("not found "+e);
}     
 $temp.val("hidden");
 alert("Temp is a "+$temp);
    alert("Temp has following value:"+$temp.val());

})
</script>

http://jsfiddle.net/22C2n/1209/

进行测试演示

本声明

$temp = $(this).next("input[type='hidden']");
  

导致“未定义”或更好:$ temp是$ object []和   不(如预期的)$ object [ input name ='h1']

问题出在哪里?

2 个答案:

答案 0 :(得分:1)

您需要使用 .nextAll() ,然后您会找到您要查找的元素。

$(this).nextAll("input[type='hidden']");

DEMO

答案 1 :(得分:0)

使用nextAll(),并小心你的catch块(小提琴中的那些;))。

我不会使用两个try / catch块,因为即使在第一个块中填充了$ temp,它也会被第二个块覆盖。

请注意,只有当输入失去焦点时才会触发更改事件。

我更新了你的小提琴:

$temp = $(this).nextAll("input[type='hidden']");
if($temp.length <= 0) $temp = $(this).nextAll("input[name='h1']");

<强> See the demo here