我使用以下代码:
$('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'
有谁知道我的代码有什么问题?
答案 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());