在 TypeScript 中禁用按钮
How to disable a Button in TypeScript
要禁用 TypeScript 中的按钮:
- 选择按钮元素。
- 使用
setAttribute()
方法设置disabled
属性。 - 例如,
btn?.setAttribute('disabled', '')
。
以下是本文示例的 HTML。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> </head> <body> <input id="submit" type="submit" name="submit" /> <button id="btn">bobbyhadz</button> <script src="./src/index.ts"></script> </body> </html>
这是相关的 TypeScript 代码。
const input = document.getElementById('submit') as HTMLInputElement | null; // ✅ Set disabled attribute input?.setAttribute('disabled', ''); // ✅ Remove disabled attribute // input?.removeAttribute('disabled') // ----------------------------------------------------------------- const btn = document.getElementById('btn') as HTMLButtonElement | null; // ✅ Set disabled attribute btn?.setAttribute('disabled', ''); // ✅ Remove disabled attribute // btn?.removeAttribute('disabled');
我们使用document.getElementById
方法选择了元素
。
我们使用类型断言来正确输入输入和按钮元素。
当我们有关于 TypeScript 不知道的值类型的信息时,使用类型断言。
input
变量存储一个HTMLInputElement
或一个null
值而不用担心它。我们使用
联合类型
来指定变量仍然可以是,因为如果DOM 中不存在null
具有提供的 HTML 元素,该方法将返回一个值。id
getElementById()
null
我们使用
可选链 (?.)
运算符来绕过null
示例中的可能值。
我们使用
setAttribute
方法disabled
在元素上设置属性。
该方法采用以下 2 个参数:
name
– 要设置的属性的名称。value
– 分配给属性的值。
const input = document.getElementById('submit') as HTMLInputElement | null; // ✅ Set disabled attribute input?.setAttribute('disabled', ''); // ✅ Remove disabled attribute // input?.removeAttribute('disabled') // ----------------------------------------------------------------- const btn = document.getElementById('btn') as HTMLButtonElement | null; // ✅ Set disabled attribute btn?.setAttribute('disabled', ''); // ✅ Remove disabled attribute // btn?.removeAttribute('disabled');
undefined
如果引用等于null
or ,则可选的链接 (?.) 运算符短路返回undefined
。
input
变量存储一个null
值,我们将不会尝试调用该setAttribute()
方法并得到运行时错误。 null
如果该disabled
属性已存在于元素上,该setAttribute
方法将更新该值,否则将添加一个具有指定名称和值的新属性。
设置布尔属性的值时,例如disabled
,我们可以为该属性指定任何值,它会起作用。
true
。如果不存在布尔属性,则该属性的值被认为是false
。
如果需要从元素中删除属性,请使用removeAttribute
方法。
const input = document.getElementById('submit') as HTMLInputElement | null; // ✅ Set disabled attribute input?.setAttribute('disabled', ''); // ✅ Remove disabled attribute input?.removeAttribute('disabled'); // ----------------------------------------------------------------- const btn = document.getElementById('btn') as HTMLButtonElement | null; // ✅ Set disabled attribute btn?.setAttribute('disabled', ''); // ✅ Remove disabled attribute btn?.removeAttribute('disabled');
disabled
属性时,我们传递一个空字符串作为属性的值,因为最佳做法是设置不带值的布尔属性。如果未在元素上设置该属性,则该removeAttribute
方法返回而不抛出错误。
如果您不想使用可选的链接 (?.) 运算符,您可以使用一个简单的if
语句作为
类型保护。
const input = document.getElementById('submit') as HTMLInputElement | null; // 👉️ input has type HTMLInputElement or null here if (input != null) { // 👉️ input has type HTMLInputElement here // ✅ Set disabled attribute input.setAttribute('disabled', ''); // ✅ Remove disabled attribute // input.removeAttribute('disabled'); }
我们明确地检查input
变量不存储null
值。
TypeScript 知道input
变量HTMLInputElement
在if
块中的类型,并允许我们直接调用该setAttribute()
方法。
null
在调用方法之前
选择从类型中排除哪种setAttribute()
方法是个人喜好问题。
null
但是,包含在类型断言中始终是最佳实践,因为如果找不到提供的元素,该getElementById
方法将返回。null
id