2

我只有在 IE7 中弹出一个问题,"Object doesn't support the property or method"onChange任何带有VariationSelect. 因此,我将其范围缩小到以下内容:

$(".VariationSelect").change(function() {
    // a bunch of irrelevant code
    // get the index of this select
    var index = $('.VariationSelect').index($(this)); //this is the line throwing the error in IE7
           //some code that returns a block of data in json formatting

});

我的第一个想法是一段代码,attr('disabled', 'disabled')因为我以前在 IE7 中也使用 removeAttr 时遇到过问题,但即使我删除了这些行,错误仍然保持不变,并且 JS 错误中的行/字符引用(当然,这是没有意义的)不会改变。那么,您在该代码块中是否看到 IE7 不接受的其他内容?

编辑:更改选择框后代码正在运行。选择框 HTML 如下所示:

<div class="DetailRow">
<div class="Label">Some Label:</div>
<div class="Value">
    <select name="variation[aNumberStartingAtOneAndIncrementingUpwards]" class="VariationSelect" id="VariationSelect" style="width: 180px;">
        <option value="">-- Choose an option --</option>
        {A bunch of options for this choice loaded by PHP}
    </select>
</div>
</div>

快速而肮脏的方法是,因为我知道名称元素中总是有一个比索引大一的数字,所以从更改的元素中获取名称,如下所示:

    var index = $(this).attr('name');
index = index.replace('variation[','');
index = index.replace(']','');
index = (index*1)-1;

有没有更快/更好的方法来获取索引?

4

1 回答 1

1

在 jQuery 中使用该 attr 函数时,它必须是您在线运行的唯一函数。

为了解决这个问题,我将代码更改为:

    $('.VariationSelect:eq(' + (index + 1) + ')').append(data.options).attr('disabled', '').focus(); 

到:

    $('.VariationSelect:eq(' + (index + 1) + ')').append(data.options); $('.VariationSelect:eq(' + (index + 1) + ')').attr('disabled', ''); 
    $('.VariationSelect:eq(' + (index + 1) + ')').focus();

它现在可以在 IE7 中运行,并且可以继续在其他所有浏览器中运行。我猜我可能会结合 append 和 focus 功能,但是嗯,它正在工作。

于 2013-11-27T21:27:42.880 回答