【问题标题】:JS: "TypeError: 'undefined' is not an object"JS:“TypeError:‘未定义’不是对象”
【发布时间】:2014-07-12 03:35:42
【问题描述】:
var name = $("input[#name]").value;
var email = $("input[#email]").value;
var msg = $("input[#msg]").value;

var nameLength = name.length;
var emailLength = email.length;
var msgLength = msg.length;

如您所见,我要做的只是获取#email 字段值的长度。它适用于其他两个字段,但不适用于电子邮件字段。它给出“TypeError: 'undefined' is not an object”。

有什么原因吗?

我在 Safari 和 Google Chrome 中都试过了,都出现了同样的错误。

HTML:

<div class="form-group">
  <label class="col-md-4 control-label" for="email">Email</label>  
  <div class="col-md-5">
    <input id="email" name="email" type="text" placeholder="Enter your email address
    here" class="form-control input-md" required="">
  </div>
</div>

【问题讨论】:

  • .value 不是 jQuery 对象的有效属性。您正在寻找.val():api.jquery.com/val。见Get value in input text box。
  • 请向我们展示您尝试定位的 HTML,以便我们就您的选择器是否正确提供建议?

标签: javascript jquery typeerror


【解决方案1】:

您正在尝试在 jQuery 对象上使用 DOM 属性。如果您有一个 jQuery 对象,那么您必须使用 jQuery 方法 .val(),而不是 DOM 属性 .value,或者您必须进入 jQuery 对象以获取 DOM 对象,然后您可以在其上使用 DOM 属性。

我建议你将其更改为使用 jQuery 方法获取值:

var name = $("input[#name]").val();
var email = $("input[#email]").val();
var msg = $("input[#msg]").val();

或者,为了说明目的,这也可以(从 jQuery 对象中取出 DOM 对象并使用.value):

var name = $("input[#name]")[0].value;
var email = $("input[#email]")[0].value;
var msg = $("input[#msg]")[0].value;

根据您添加到问题中的 HTML,您还需要修复选择器。要定位id="xxx",您只需使用$("#xxx")。不需要选择器的其他部分,因为 id 在整个文档中必须是唯一的。因此,如果您的所有 HTML 都像您在问题中显示的电子邮件部分一样工作,那么您可以使用这个:

var name = $("#name").val();
var email = $("#email").val();
var msg = $("#msg").val();

【讨论】:

  • 然而,这解决了这个问题 - 它导致了我代码中的另一个问题 - 在另一个变量上给了我同样的错误。 var emailStructureAtPos = email.indexOf("@");
  • @user3666951 - 你很可能在代码的后面犯了一些其他错误。如果没有看到该代码,我们将无能为力。
  • @user3666951 - 在调试器中查看当时的 email 是什么。也许它超出了范围?
  • @user3666951:你的选择器看起来很奇怪。 input[#name] 选择具有名为#name 的属性 的input。我认为# 甚至不是属性名称中的有效字符,所以我怀疑这实际上选择了任何东西。如果要按 ID 选择,只需使用 #name。我推荐阅读 jQuery 教程:learn.jquery.com/using-jquery-core/selecting-elements, learn.jquery.com/using-jquery-core/manipulating-elements/….
  • @user3666951 - 你需要在这里学习一些基本的调试技术。使用 console.log() 语句或在调试器中检查变量和 jQuery 对象的值,并找出哪里出了问题。您显然正在更改代码,所以我不知道您现在在什么代码上遇到了什么错误,因此根据您的最新评论,我无能为力。您的代码中有错误。隔离确切的代码行,检查该代码行周围的变量和表达式的结果,找出究竟是什么不工作或发布更多细节。
猜你喜欢
  • 2018-07-08
  • 2021-06-11
  • 2018-12-21
  • 2021-12-17
  • 2021-12-01
  • 2019-11-16
  • 2020-02-09
  • 2019-12-07
  • 2022-01-01
相关资源
最近更新 更多