3

我已经盯着这显然不起作用的一小段代码太久了。为什么不选择框 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:无法将未定义转换为对象

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

但似乎无法理解为什么。

4

2 回答 2

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.

于 2013-01-04T14:29:20.877 回答
0

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

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

  });
于 2013-01-04T14:33:42.580 回答