为什么我得到Uncaught TypeError:对象#<an htmlselectelement =“”>没有方法'find'?</an>

时间:2010-12-07 13:05:55

标签: jquery google-chrome typeerror methodnotfound

我为什么会这样做:

  

未捕获的TypeError:对象#没有方法   '找'(匿名   功能):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>');
  });
});

在我的头文件标签中我有:

<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>

我正在使用Google Chrome(与开发人员工具一起使用)。

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

亲切的问候,

2 个答案:

答案 0 :(得分:6)

当您执行[0]时,您将获得选择器匹配的第一个元素作为DOM元素,而不是具有.find()的jQuery对象,只需删除[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 ...使用类。

答案 1 :(得分:1)

将它变成像这样的jQuery对象:

$($("select#p_colorsId")[0]).find('option')