javascript - 为什么这个 javascript 会抛出这个特定的错误?

标签 javascript html

在我的 HTML 代码中,我有一个按钮,当按下该按钮时会运行一个 javascript 函数。这是按钮的 HTML 代码:

<button type="button" onclick="repeatName()">Click me!</button>

我希望用户在文本字段(位于表单内部)中输入内容。这是文本字段的代码:

<input type="text" name="txtName" />

我希望这个 div 的 innerHTML 在按下按钮后根据名称文本框中的信息进行更改。这是 div 的代码:

<div name="editThis" width="50px" height="50px" border="1px">

</div>

单击按钮时,我希望它运行下面的函数。它应该更改 div 的 innerHTML。

function repeatName() {
    var editField = document.getElementsByName("editThis").innerHTML;
    var repeatedName = document.theForm.txtName.value;

    editField = (repeatedName + " is the value.")

}

问题是每当单击按钮时,我都会在 Firefox 错误控制台中看到此错误:

Error: uncaught exception: [Exception... "Cannot modify properties of a WrappedNative"  nsresult: "0x80570034 (NS_ERROR_XPC_CANT_MODIFY_PROP_ON_WN)"  location: "JS frame :: chrome://global/content/bindings/autocomplete.xml :: onxblpopuphiding :: line 825"  data: no]

这是什么错误,我该如何更正它?

最佳答案

根据 the documentation , document.getElementsByName(str) 返回“元素列表”。

很明显,“元素列表”没有单一的 .innerHTML 属性。我猜想具体的错误与您的浏览器以其自己的 WrappedNative 类型表示该列表的内部机制有关。

改为迭代结果;在您的情况下,您只需要第一个结果,因此使用数组访问器语法 [0] 获取它。

但是,由于 name 属性与表单组件相关,您应该改用 id。通过 ID 检索元素更容易,因为 ID [应该] 是唯一的。

此外,由于 Javascript 没有引用,您不能将 innerHTML 存储在变量中并更改它以期望原始属性发生更改;您必须在注释 innerHTML 的同一语句中进行赋值:

function repeatName() {
    var editField = document.getElementsById("editField");
    var repeatedName = document.theForm.txtName.value;

    editField.innerHTML = repeatedName + " is the value."
}

关于javascript - 为什么这个 javascript 会抛出这个特定的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6380192/

相关文章:

javascript - 如何获取下拉框的文本属性

javascript - 这段代码有什么问题吗? .checked 可能是我没有正确使用的那个

javascript - AngularUI 模态对话框不起作用

javascript - 如何在 P5js/JavaScript 中按名称循环函数

javascript - jQuery 函数自动重新加载页面

javascript - Freemarker 中的多语言自动转义

html - .tab-current CSS 定义

java - 使用 Selenium Java 测试用例调用 CLICK 时获取 "org.openqa.selenium.ElementClickInterceptedException"

javascript - Rails 中数据表的替代品?

html - 两个表本应显示为一个用于固定标题滚动——固定列宽问题