2

为什么我得到:

Uncaught TypeError: Object # has no method 'find' (anonymous function):8080/twolittlesheep/js/sizeColorDependancy.js:16 c.event.handleajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min .js:63 c.event.add.h.handle.oajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js:56

当我尝试运行一个简单的 jQuery 脚本时?该脚本位于我在下一个 jquery 代码片段中使用 find 方法的那一行:

$(document).ready(function(){
  $("select#p_sizesId").change(function(){
   var $colorsSelect = $("select#p_colorsId")[0];
   $("select#p_colorsId")[0].find('option').remove().end().append('<option selected="selected" value="whatever">text</option>');
  });
});

在我的 html 中的 head 标签中,我有:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<%-- <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"></script> --%>
<script type="text/javascript" src="js/sizeColorDependancy.js"></script>

我正在使用谷歌浏览器(连同开发者工具)。

我在另一个线程中发现的所有解释是,当使用 Chrome 的开发人员工具时,问题就出现了。但是我在没有使用开发工具的情况下运行代码,同样的事情发生了(脚本没有做任何事情=>发生错误)。

4

2 回答 2

6

当您这样做时,[0]您将从选择器匹配的第一个元素作为 DOM 元素获取,而不是具有jQuery对象.find(),只需 remove [0],如下所示:

$(document).ready(function(){
  $("#p_sizesId").change(function(){
   $("#p_colorsId").find('option').remove().end().append('<option selected="selected" value="whatever">text</option>');
  });
});

其他一些注意事项,当使用#id选择器时,除非绝对需要,否则不要为其添加前缀,它会减慢速度。此外,由于ID应该是唯一的,因此不需要获取第一个元素。选择器应该只匹配 1 或 0 个元素。如果它们不是唯一的,请不要使用ID ,而是使用classes

于 2010-12-07T13:09:05.883 回答
1

只需将其变成这样的 jQuery 对象:

$($("select#p_colorsId")[0]).find('option')
于 2013-08-29T13:06:48.650 回答