Cannot set properties of NULL 错误[已解决]
Cannot set property ‘innerHTML’ of Null in JavaScript
出现“TypeError: Cannot set properties of null”的原因有 3 个:
- 在存储值的变量上设置属性
null
。 - 为 DOM 中不存在的元素设置属性。
- 在声明 DOM 元素的 HTML 上方插入 JS 脚本标记。
如果您在存储值的变量上设置属性,则会发生此错误null
。
这里有些例子。
const el = null; // ⛔️ Uncaught TypeError: Cannot set properties of null (setting 'innerHTML') el.innerHTML = 'new value'; // --------------------------------------------- // ⛔️ TypeError: Cannot set properties of null (setting 'value') const obj = null; obj.value = 'example' // --------------------------------------------- const arr = null; // ⛔️ Uncaught TypeError: Cannot set properties of null (setting '0') arr[0] = 'value';
解决错误的一种方法是在初始化变量时提供回退值。
const fromDb = null; const obj = fromDb || {}; obj['src'] = 'value'; // 👉️ {src: 'value'} const arr = fromDb || []; arr[0] = 'value'; // 👉️ ['value']
如果左边的值是假的(例如 ),逻辑 OR (||) 运算符返回右边的值null
。
如果fromDb
变量存储一个null
值,则返回一个空对象或一个空数组。
您还可以
在设置属性之前使用if
语句
检查变量是否存在。null
const obj = null; if (obj != null) { obj.property = 'value'; } console.log(obj); // 👉️ null
该if
块仅在fromDb
变量不存储null
值时运行。
确保你访问的DOM元素存在
确保您正在访问的 DOM 元素存在。
在使用方法后尝试设置属性
getElementById()
并将其传递给不存在的id
.
const el = document.getElementById('does-not-exist'); console.log(el); // 👉️ null // ⛔️ Uncaught TypeError: Cannot set properties of null (setting 'innerHTML') el.innerHTML = 'Hello world';
我们将id
DOM 中不存在的一个传递给该
document.getElementById()
方法。
如果提供的元素
不存在,则该getElementById()
方法返回。null
id
尝试访问值的属性null
会导致错误。
const el = document.getElementById('does-not-exist'); console.log(el); // 👉️ null if (el) { el.innerHTML = 'Hello world'; } else { console.log('element not found'); }
if
如果变量存储一个值,则If块将不会运行null
。
出现错误的另一个常见原因是在声明 DOM 元素之前放置 JS 脚本标记。
将JS脚本标签放在body标签的底部
确保在正文底部插入 JS 脚本标签。
JS 脚本标签应该放在 HTML 元素声明之后。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> </head> <body> <!-- ⛔️ BAD - Script is run before div exists ⛔️ --> <script src="index.js"></script> <div id="box">Content</div> </body> </html>
请注意,JS 脚本位于div
元素上方。
HTML 代码是从上到下解析的,因此文件在创建元素index.js
之前运行。div
因此我们无法访问文件div
中的index.js
。
const el = document.getElementById('box'); console.log(el); // 👉️ null // ⛔️ Cannot set properties of null (setting 'innerHTML') el.innerHTML = 'Hello world';
相反,必须将 JS 脚本标记移动到它尝试访问的 DOM 元素下方。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> </head> <body> <div id="box">Content</div> <!-- ✅ GOOD - div already exists ✅ --> <script src="index.js"></script> </body> </html>
现在,我们可以访问文件div
中的元素index.js
。
const el = document.getElementById('box'); console.log(el); // 👉️ div#box // ✅ Works el.innerHTML = 'Hello world';
现在 HTML 元素是在index.js
脚本运行之前创建的,我们可以访问 DOM 元素并设置其innerHTML
属性。
要解决“TypeError:无法设置 null 的属性”错误,请确保:
- 您不是在值上设置属性
null
。 - 您没有在不存在的 DOM 元素上设置属性。
- 您还没有将 JS 脚本标记放在它需要访问的元素之上。
解决特定属性错误的示例
以下是解决特定属性和方法错误的一些示例。
目录
- 无法设置 null 的属性(设置“onclick”)
- 无法设置 null 的属性(设置“textContent”)
- 无法设置 null 的属性(设置“值”)
- 无法设置 null 的属性(设置“src”)
不能设置 null 的属性(设置 ‘onclick’)
“无法设置 null 的属性(设置‘onclick’)”错误的发生有两个原因:
- 将属性设置
onclick
为一个null
值(不存在的 DOM 元素)。 - 将 JS 脚本标记放在声明 DOM 元素的 HTML 上方。
下面是错误如何发生的示例。
const button = null; // ⛔️ Uncaught TypeError: Cannot set properties of null (setting 'onclick') button.onclick = function click() { console.log('Button clicked'); };
要解决错误,请确保:
- 您正在访问其属性的 DOM 元素
onclick
存在。 - 您已将 JS 脚本标签放在 body 标签的底部。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> </head> <body> <button id="btn">Click me</button> <!-- ✅ GOOD - button already exists ✅ --> <script src="index.js"></script> </body> </html>
现在index.js
文件可以访问元素了button
。
const button = document.getElementById('btn'); console.log(button); // 👉️ button#btn // ✅ Works button.onclick = function click() { console.log('Button clicked'); };
无法设置 null 的属性(设置 ‘textContent’)
发生错误有两个原因:
- 将属性设置
textContent
为一个null
值(不存在的 DOM 元素)。 - 将 JS 脚本标记放在声明 DOM 元素的 HTML 上方。
下面是错误如何发生的示例。
const element = null; // ⛔️ Uncaught TypeError: Cannot set properties of null (setting 'textContent') element.textContent = 'some content';
要解决错误,请确保:
- 您设置
textContent
属性的 DOM 元素存在。 - 您已将 JS 脚本标签放在 body 标签的底部。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> </head> <body> <div id="box">Old content</div> <!-- ✅ GOOD - div already exists ✅ --> <script src="index.js"></script> </body> </html>
Now, the div
element can be accessed from the index.js
file.
const element = document.getElementById('box'); console.log(element); // 👉️ div#box // ✅ Works element.textContent = 'New content';
# Cannot set properties of null (setting ‘value’) in JS
The “TypeError: Cannot set properties of null (setting ‘value’)” error occurs
for 3 reasons:
- Setting the
value
property on a variable that stores anull
value. - Setting the
value
property on a DOM element that doesn’t exist. - Placing the JS script tag above the HTML, where the DOM elements are
declared.
The error occurs if you set the value
property on a variable that stores a
null
value.
const input = null; // ⛔️ Uncaught TypeError: Cannot set properties of null (setting 'value') input.value = 'new value';
One way to solve the error is to use the logical OR (||) operator to provide a
fallback if the variable is null
.
const fromDb = null; // ✅ Provide empty object fallback const obj = fromDb || {}; obj.value = 'new value'; console.log(obj); // 👉️ {value: 'new value'}
Make sure you’re accessing the correct DOM element and add a conditional check
to be certain the element is found, before setting a property on it.
const input = document.getElementById('does-not-exist'); console.log(input); // 👉️ null if (input) { input.value = 'New value'; } else { console.log('input does not exist'); }
To solve the error, make sure:
- The DOM element on which you are setting the
value
property exists. - You have placed the JS script tag at the bottom of the body tag.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> </head> <body> <input id="first_name" name="first_name" type="text" /> <!-- ✅ GOOD - input already exists ✅ --> <script src="index.js"></script> </body> </html>
Now, we can access the input
element inside the index.js
file.
const input = document.getElementById('first_name'); console.log(input); // 👉️ input#first_name // ✅ Works input.value = 'New value';
# Cannot set properties of null (setting ‘src’)
The “TypeError: Cannot set properties of null (setting ‘src’)” occurs for 2
reasons:
- Setting the
src
property on anull
value (image element that doesn’t
exist). - Inserting the JS script tag above the HTML where the DOM elements are
declared.
Here is an example of how the error occurs.
const image = null; // ⛔️ Uncaught TypeError: Cannot set properties of null (setting 'src') image.src = 'photo.jpg';
To solve the error, make sure:
- The DOM element on which you are setting the
src
property exists. - You have placed the JS script tag at the bottom of the body tag.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> </head> <body> <img id="photo" width="200" height="200" src="cat.jpg" /> <!-- ✅ GOOD - img already exists ✅ --> <script src="index.js"></script> </body> </html>
现在img
可以从文件访问该元素index.js
。
const image = document.getElementById('photo'); console.log(image); // 👉️ img#photo // ✅ Works image.src = 'photo.jpg';