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);
            })

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

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

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

4

4 回答 4

4

重点:

您拥有的对象this是 HTMLElement 对象,而不是 jQuery 对象。

$(this)您可以通过使用而不是this或更好地通过分配$(this)给变量并在任何地方使用该变量来纠正此问题。

作为旁注:

通过首先检查它是否是语法来调试错误;然后检查它是否是您不知道的 API“功能”(当前情况);只有然后检查它是否是一个概念问题(不能以这种方式完成)。

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

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

于 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(...

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

于 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 回答