4

jquery 1.2.6を使用しています(システムの一部であるため、アップグレードできません)。奇妙なエラーが発生します。

これは私のコードです:

<!DOCTYPE html>
<html>
    <head>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
    </head>
    <body>
        <select id="state" name="state">
            <option selected="selected"></option>
                        <option value="none">N/A</option>
                        <option value="AK">AK</option>
                        <option value="AL">AL</option>
                        <option value="AR">AR</option>
                        <option value="AZ">AZ</option>
                        <option value="CA">CA</option>
        </select>
    </body>
</html>
<script type="text/javascript">
    $(function() {
        var test = $('#state').val();
    });
</script>

IE9でテストすると、ページの読み込み時に次のエラーが発生します。

"Unable to get value of the property 'specified': object is null or undefined" 

何故ですか?

4

2 に答える 2

4

オプションの値はオプションです「ない場合、オプション要素の値は要素のtextContentです。」)。したがって、ここでバグが発生しているようです。

古いjQueryソースコードを調べたところ、バグが見つかりました:

value = jQuery.browser.msie && !option.attributes.value.specified ? option.text : option.value;

option.attributes.value未定義なのでoption.attributes.value.specifiedクラッシュします。

バグはjQueryにあるため(より正確には、現在修正されている古いIEのバグを回避する試みのように見えます)、この特定のタスクでjQueryを使用しないことは正当です。

HTMLを変更する代わりに(HTMLは問題ありません)、回避策として、バニラJSソリューションを使用することをお勧めします。

var test = document.getElementById('state').value;

バグがjQueryにあると言うとき、それは主に、2008ブラウザのバグを回避しようとしているときに2008バージョンのjQueryが最近のバージョンのIEで失敗することを意味することに注意してください。この古いjQueryを維持することは適切な決定ではないことをアーキテクトに実際に伝える必要があります。

于 2012-12-12T09:22:36.940 に答える
2

選択したオプションには値が設定されていないため、不平を言っています:)

于 2012-12-12T09:18:49.580 に答える