当我尝试为选择找到所选选项时,为什么会出现错误?

时间:2012-08-20 12:53:18

标签: jquery

我使用以下代码:

        $('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);
            })

它通过使用更新网格类查找所有选择来工作。当我单步执行此代码时,我在以“var sel”开头的行上出现错误。

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

有谁知道我的代码有什么问题?

4 个答案:

答案 0 :(得分:4)

至关重点:

this中的对象是HTMLElement对象,而不是jQuery对象。

您可以使用$(this)代替this或更好地更正此问题,方法是将$(this)分配给变量并在任何地方使用该变量。

作为旁注:

通过首先检查错误是否为句法来调试错误;然后检查它是否是您不了解的API“功能”(当前案例);然后检查它是否是一个概念问题(不能这样做)。

尝试隔离您的问题,将其脱离上下文,直到您拥有可以重现错误的最小代码段。这揭示了错误的一般性质,并允许您更好地理解(相当通用的,有时是加密的)错误“消息”。

在互联网上查看错误消息,找到处于类似或不同困境的其他人,并查看类似的事情是如何得到修复的,以及如何修复不同的事情。之后,您可以提出一个记录在案的问题并理解答案。

答案 1 :(得分: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);
    });

是我想要的。

答案 2 :(得分:2)

尝试使用

$(this).find(...

在每个方法中,这个对DOM元素的引用不是jquery对象

答案 3 :(得分:1)

只需使用此

 $("select option:selected").

或者在你的代码中你只是误导$(这个)只是写了这个

的内容
$(this).find(':selected').text();

或检查

alert($(this).find(":selected").text());