jquery .each() 在 IE7/8 上无法在输入 [type=checkbox] 之前使用 div 标识符



我有这样一段代码。我在表单上有 4 组复选框,每组都必须单独通过此功能。ID 变量是放置在每个集合周围的给定div 的 id

 $('#'+id+' input[type=checkbox]:checked').each(function() {
     var value = $(this).val();
         (...)
 });

在chrome,Firefox和IE9上运行良好。不适用于 IE7/8。

在IE7/8上起作用的是这个

$('input[type=checkbox]:checked').each(function() {
     var value = $(this).val();
         (...)
 });

所以它可以在没有div 标识符的情况下工作。我仍然需要能够告诉IE7/8我希望它通过哪组复选框。我应该如何容纳该div 标识符,使其适用于较旧的 IE?

如果复选框是按组或集组织的,我通常这样做的方法是将数组名称添加到复选框组并在 jQuery 中使用它。

<input type="checkbox" name="groupone[]"/>
<input type="checkbox" name="groupone[]"/>
<input type="checkbox" name="grouptwo[]"/>
<input type="checkbox" name="grouptwo[]"/>

在jQuery中:

$('input[name="groupone[]"]').filter(':checked')

尝试使用如下所示的.find.filter

$('#'+id).find('input[type=checkbox]').filter(':checked').each(function () {
 //..

您可以使用:checkbox而不是长input[type=checkbox]

$('#'+id).find(':checkbox').filter(':checked').each(function () {

如果您的页面中有多个具有该 ID 的元素,IE 可能会窒息。但是我通常用于您正在做的事情的模式更像是这样的:

$('#' + id)
  .find('input[type=checkbox]:checked')
  .each(function() { /...

您可以使用.find(':checkbox:checked')代替第二行,但使用上述代码应该可以获得更好的性能。 [type=checkbox]可以在现代浏览器中使用本机方法来提高效率。此外,.find(':checkbox')显然让jQuery检查div中的每个元素,看看它是否与:checkbox匹配,即使是不是输入的元素(所以它们不可能是复选框)。这可能已经在最新版本的jQuery中解决了,但据我所知。

最新更新