簡體   English   中英

Object 可能是“空” Typescript

[英]Object is possibly 'null' Typescript

我似乎遇到了一個問題,它告訴我該對象可能是 null。 我在網上和 StackOverflow 上查看過,並嘗試了十幾個修復都沒有成功。 我正在嘗試使用它們的 id 將文本“test”插入 html 元素中。

  var cname = document.getElementById("chargername");
  var cloc = document.getElementById("chargerlocation");
  var ctype = document.getElementById("chargertype");
  var cdesc = document.getElementById("chargerdescription");
  var crating = document.getElementById("chargerrating");

  function handleClick() {
    cname.innerHTML = "test";
    cloc.innerHTML = "test";
    ctype.innerHTML = "test";
    cdesc.innerHTML = "test";
    crating.innerHTML = "test";
  }

我收到此錯誤:“TypeError:無法設置 null 的屬性(設置'innerHTML')”

任何幫助表示贊賞,謝謝!

這可能是因為代碼是在加載dom之前執行的,因此是null

首先檢查腳本的加載位置。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="index.js"></script>  <!-- If the script is placed here then there is a high chance it is executed before dom is loaded -->
    <title>Document</title>
</head>
<body>
</body>
</html>

如果腳本放置在 head 標簽中,那么它很有可能在加載 dom 之前執行。

您可以添加 onLoad 腳本來檢測 dom 是否已加載,然后執行您的腳本。

您可以參考此處以查看實現

像這樣的東西應該適合你。

window.onload = function () {
  function elmById(idName: string): HTMLElement {
    return document.getElementById(idName) as HTMLElement;
  }

  const cloc = elmById('chargerlocation');
  const ctype = elmById('chargertype');
  const cdesc = elmById('chargerdescription');
  const crating = elmById('chargerrating');

  function handleClick() {
    cloc.innerHTML = 'test';
    ctype.innerHTML = 'test';
    cdesc.innerHTML = 'test';
    crating.innerHTML = 'test';
  }
};

您可以告訴 typescript 元素不會是 null 與as HTMLElement

let cloc = document.getElementById("chargerlocation") as HTMLElement;
let ctype = document.getElementById("chargertype") as HTMLElement;
let cdesc = document.getElementById("chargerdescription") as HTMLElement;
let crating = document.getElementById("chargerrating") as HTMLElement;

function handleClick() {
  cloc.innerHTML = "test";
  ctype.innerHTML = "test";
  cdesc.innerHTML = "test";
  crating.innerHTML = "test";
}

也可以使用感嘆號! . 它是非空斷言運算符。 它從類型中刪除 null 和 undefined 。 像這樣:

  let cloc = document.getElementById("chargerlocation");
  let ctype = document.getElementById("chargertype");
  let cdesc = document.getElementById("chargerdescription");
  let crating = document.getElementById("chargerrating");

  function handleClick() {
    cloc!.innerHTML = "test";
    ctype!.innerHTML = "test";
    cdesc!.innerHTML = "test";
    crating!.innerHTML = "test";
  }

操場

這就是我最終修復此錯誤的方法:

var cname = docSelect.name;
var cloc = docSelect.location;
var ctype = docSelect.types;
var cdesc = docSelect.description.substring(0, 90) + "...";
var clink = `/chargers/${props}`;
document.getElementsByClassName("chargername")[0].innerHTML = cname;
document.getElementsByClassName("chargerlocation")[0].innerHTML = cloc;
document.getElementsByClassName("chargertype")[0].innerHTML = ctype;
document.getElementsByClassName("chargerdescription")[0].innerHTML = cdesc;

感謝所有回應我的請求的人:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM