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

时间:2013-01-04 14:27:39

标签: javascript jquery

我已经盯着这个显然不起作用的小代码了。为什么不选择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:无法将undefined转换为object

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

但似乎无法理解为什么。

2 个答案:

答案 0 :(得分:6)

首先必须初始化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

答案 1 :(得分:0)

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

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

  });