2010-09-28 61 views
2

我有一个简短的问题,我需要一些帮助,如果可能的话。我能够通过这些值有多个具有相同ID和循环的输入吗?一些类似下面的代码:jquery每个问题

<p>ID:<input name="check_id" type="hidden" id="check_id" value="1"/></p> 
     <p>ID:<input name="check_id" type="hidden" id="check_id" value="2"/></p> 

jQuery("#check_id").each(function(){ 
var check_data = jQuery(this).val(); 
alert(check_data); 
}); 

感谢

保罗

+0

jQuery的,不是jQuery的 – titaniumdecoy 2010-09-28 23:09:46

回答

1

号ID必须是唯一的。你可能只会选择第一个。

你可能做这样的事情,虽然效率较低:

jQuery("input[id=check_id]").each(function(){ 
    var check_data = jQuery(this).val(); 
    alert(check_data); 
}); 

但是,如果你要做到这一点,你还不如解决您的ID是唯一的,并通过选择name属性。

jQuery("input[name=check_id]").each(function(){ 
    var check_data = jQuery(this).val(); 
    alert(check_data); 
}); 

如果你想要的所有<input>元素包含在一个容器中,你可以通过指定容器加快速度。

jQuery("#myContainer input[name=check_id]").each(function(){ 
    var check_data = jQuery(this).val(); 
    alert(check_data); 
}); 

此代码示例假设有一个ID myContainer的共同祖先。


编辑:关于你的问题在下面的评论,return false;.each()循环中只退出循环。然而你可以设置一个标志来告诉后面的代码是否执行。

事情是这样的:

var shouldContinue = true; 

jQuery("#myContainer input[name=check_id]").each(function(){ 
    var check_data = jQuery(this).val(); 
    if(someCondition) { 
     shouldContinue = false; // signal to not execute subsequent code 
     return false; // Halt the loop 
    } 
}); 

if(shouldContinue) { 
    // execute code if shouldContinue is true 
} 
+0

谢谢你的回答,正是我需要的 – 2010-09-28 21:45:23

+0

@保罗 - 不客气。 :o) – user113716 2010-09-28 22:03:00

+0

嗨帕特里克,是否有可能停止我的脚本运行的其余部分,在循环内使用return false还是只能停止剩余的循环? – 2010-09-28 22:49:52

0

在HTML中,ID是唯一。所以不,你只会在使用#..选择器时得到一个对象。哪一个是多次分配单个ID的时候没有定义;其实你应该解决这个问题!

0

HTML id attribute的整点在于它应该是唯一的。

也许你想用classes代替?例如,考虑以下因素:

<p>ID:<input name="check_id" type="hidden" class="check_id" value="1" /></p> 
<p>ID:<input name="check_id" type="hidden" class="check_id" value="2" /></p> 

... 

jQuery(".check_id").each(function() { 
    var check_data = jQuery(this).val(); 
    alert(check_data); 
}); 
0

可以删除id属性(如其他人所说的,必须在文档中是唯一的),并使用attribute-equals selector通过名称来选择,像这样:

jQuery("input[name=check_id]").each(function() { 
    var check_data = jQuery(this).val(); 
    alert(check_data); 
}); 

或加class="check_id"(还是去掉id="check_id"),并使用一类选择,就像这样:

jQuery(".check_id").each(function() { 
    var check_data = jQuery(this).val(); 
    alert(check_data); 
}); 
+0

我不知道在IE中选择使用attribute-equals选择器是否更快,因为它不需要拆分潜在的多个类名称。有什么想法吗? – user113716 2010-09-28 21:30:19

+0

谢谢,这正是我想要做的。感谢您花时间回复 – 2010-09-28 21:31:14

+0

@patrick - 可能,但是'className'在每个元素上,而'name'是未定义的并且提前跳出,所以我不确定是否会测试它,尽管测试在更老的IE恐吓我:) – 2010-09-28 21:39:02