将 Button.type 默认设置为“button”

问题描述 投票:0回答:1

我希望当我创建一个新按钮时,它的类型默认设置为“按钮”。这是我尝试过的:

var createE = document.createElement;
document.createElement = (str) => {
  let elem = createE(str);
  if (str.toLowerCase() == "button") {
    elem.type = "button";
  }
}

我在

let elem = createE(str);
(Chrome 中)

遇到“非法调用”异常

除了在我本来要使用 createElement("Button") 的每个地方使用函数之外,还有其他方法可以覆盖原型或以其他方式实现此目的吗?

javascript button overriding
1个回答
0
投票

您可以使用代理重写该方法,如下所示:

TypeScript Playground 中的代码

const createElementOriginal = document.createElement;
const createElement = createElementOriginal.bind(document);

document.createElement = new Proxy(document.createElement, {
  apply(_target, _thisArg, [tagName, options]) {
    const element = createElement(tagName, options);
    if (tagName.toLowerCase() === "button") {
      element.setAttribute("type", "button");
    }
    return element;
  },
});

const btn = document.createElement("button");
console.log(btn.type, btn.outerHTML); // "button" "<button type="button"></button>"

© www.soinside.com 2019 - 2024. All rights reserved.