0

次のコードを使用しています。

        $('select.update-grid')
            .each(function () {
                var id = this.id.replace('modal', '');
                var sel = this.find("option:selected").text();
                var val = this.val()
                $('#input' + id)
                    .val(val)
                    .attr('title', sel);
            })

update-grid のクラスですべての選択を見つけることによって機能します。このコードをステップ実行すると、「var sel」で始まる行でエラーが発生します。

SCRIPT438: Object doesn't support property or method 'find' 

私のコードの何が問題なのか誰か知っていますか?

4

4 に答える 4

4

ポイントへ:

あなたが持っているオブジェクトthisは HTMLElement オブジェクトであり、jQuery オブジェクトではありません。

変数に代入し、その変数をどこでも使用することで、$(this)代わりに使用するthisか、より良い方法でこれを修正できます。$(this)

補足として:

エラーのデバッグにアプローチするには、まずエラーが構文的かどうかを確認します。次に、それがあなたが知らなかった API の「機能」であるかどうかを確認します (現在のケース)。それが概念的な問題であるかどうかを確認するだけです(この方法では実行できません)。

エラーを再現できる最小のコードが得られるまで、問題を特定し、文脈から切り離してみてください。これにより、エラーの非常に一般的な性質が明らかになり、(かなり一般的で、場合によっては不可解な) エラー「メッセージ」をよりよく理解できるようになります。

インターネットでエラー メッセージを調べて、同じような苦境または異なる苦境にある人を見つけて、同じような問題がどのように修正されるかだけでなく、異なる問題がどのように修正されるかを調べてください。その後、文書化された質問をして、回答を理解できます。

于 2012-08-20T12:56:02.933 に答える
3

.each() を実行している場合、これは現在の select.update-grid DOM 要素を参照し、jquery 参照ではありません。

$('select.update-grid')
    .each(function () {
    var grid = $(this);
        var id = this.id.replace('modal', '');
        var sel = grid.find("option:selected").text();
        var val = this.value;
        $('#input' + id)
            .val(val)
            .attr('title', sel);
    });

あなたが探しているものだと思います。

于 2012-08-20T12:55:50.500 に答える
2

使ってみて

$(this).find(...

各メソッド内で、jquery オブジェクトではなく DOM 要素へのこの参照

于 2012-08-20T12:55:57.363 に答える
1

これを使うだけ

 $("select option:selected").

または、あなたのコードでは、$(this) を見逃しているだけです。

$(this).find(':selected').text();

またはチェックする

alert($(this).find(":selected").text()); 
于 2012-08-20T12:55:56.707 に答える