jQuery each()不会对所有元素进行迭代

jQuery each() doesn't iterate on all elements

本文关键字:元素 迭代 each jQuery      更新时间:2023-09-26

我已经盯着这个显然不工作的小块代码太久了。为什么不提醒select box rel属性?

HTML:

<select rel="prop216" name="prop[]">
  <option value="">- none</option>
  <option value="12">Opt 1</option>
  <option value="13">Opt 2</option>
</select>
<select rel="prop217" name="prop[]">
  <option value="">- none</option>
  <option value="12">Opt 1</option>
  <option value="13">Opt 2</option>
</select>
jQuery:

$("select").change(function()
{
 var i = 0;
 var alteredSelects = [];
 $("select").each(function()
 {
    if ( $(this).val() !== "" )
    {
        alteredSelects[i][0] = $(this).attr('rel');
        alteredSelects[i][1] = $(this).val();
        alert ($(this).attr('rel'));
        i++;
    }
 });
});

参见我的jSfiddle: http://jsfiddle.net/ft6Bd/1/

我在Firefox中得到一个错误

TypeError: can't convert undefined to object

alteredSelects[i][0] = $(this).attr('rel');

线上

但似乎不知道为什么。

首先要初始化alteredSelects[i],然后才能给它赋值:

$("select").change(function() {
    var i = 0;
    var alteredSelects = [];
    $("select").each(function() {
        if ( $(this).val() !== "" ) {
            alteredSelects[i] = []; // <-- Initialize `alteredSelects[i]` as empty array.
            alteredSelects[i][0] = $(this).attr('rel');
            alteredSelects[i][1] = $(this).val();
            alert($(this).attr('rel'));
            i++;
        }
    });
});

问题是,你试图保存一些东西到alteredSelects[i],而alteredSelects[i]null

这不是答案,但你不应该使用自己声明的变量进行索引:jquery各有自己的Index:

  $.each(collection, function(index, value) { 
  });