Javascript'undefined不是一个函数' - 你能澄清一下这个例子吗?

时间:2014-12-14 07:59:11

标签: javascript jquery

相关的HTML:

<div id="suggestedEmailDiv">  
  Did you mean <a class="suggestedEmailClass">
    <span id="suggestedEmailAddressSpan" class="address"></span>
    @
    <span id="suggestedEmailDomainSpan" class="domain"></span>
  </a>?
</div>

相关的javascript:

console.log("suggestion.address ", suggestion.address);
console.log("suggestedEmailAddressSpan ", $('suggestedEmailAddressSpan'));
// here's where it goes wonky:
$('suggestedEmailAddressSpan').text(suggestion.address);

相关日志:

[Log] suggestion.address  qwew (btadmin, line 195)  <-- suggestion.address has a value
[Log] suggestedEmailAddressSpan   (btadmin, line 198) <-- it is a defined span!!
<span id=​"suggestedEmailAddressSpan" class=​"address">​</span>​

[Error] TypeError: undefined is not a function (evaluating '$('suggestedEmailAddressSpan').text(suggestion.address)')
suggested (btadmin, line 205)
responder (prototype.js, line 5597)

我知道我错过了一些简单而重要的东西......这是什么?

感谢您的帮助!!

3 个答案:

答案 0 :(得分:3)

好的,我能想到的最接近的是 jQuery未加载

它给出的是你的日志没有返回一个jQuery对象。 jQuery返回一个类似于数组的对象,它在控制台上看起来就像一个括号内的元素列表。您可以通过在此StackOverflow页面中的控制台上执行$('body')来验证这一点(因为SO使用jQuery:P),您应该看到类似的内容:

[<body class=​"question-page new-topbar">​…​</body>​]

现在,当没有加载jQuery时,可能会产生两件事:

  • $undefined,导致该错误。

  • 某些浏览器(例如Chrome)本身具有映射到document.querySelector$函数。如果没有加载jQuery,则不会覆盖$全局。该错误是因为您在text()的结果上调用了querySelector,这是与提供的选择器匹配的第一个DOM元素。

另一种可能的情况是,其他东西占据了$全局。症状可能包括成功加载jQuery,但$不是jQuery。但如果发生这种情况,你的日志就不会提供太多线索。

要解决您的问题,请确保在脚本之前加载jQuery。此外,将回调内的脚本放在回调到$(document).ready()的内部,这样就可以在DOM完全加载后运行脚本。


此外,您的选择器错误。 ID的选择器以#开头。 然而 ,为jQuery提供错误的选择器不应该出错,因为调用错误的选择器将返回一个仍然具有.text()方法的空jQuery集。 / p>

答案 1 :(得分:0)

您在查询中缺少ID选择器,它应该是这样的 $("#suggestedEmailAddressSpan")详细了解JQuery selector

答案 2 :(得分:0)

选择ID使用

$('#suggestedEmailAddressSpan')

用于课堂使用

$('.suggestedEmailClass')

对于jquery,最好在就绪函数之间编写代码:

$(document).ready(function() {
   //your code
});