gpt4 book ai didi

javascript - 你可以全局改变 onChange 吗?

转载 作者:行者123 更新时间:2023-12-03 00:09:20 26 4
gpt4 key购买 nike

是否可以全局改变 HTML“onChange”?

例如,我可以让 onChange 始终调度(redux 调度)每个事件处理程序的返回值吗?

是的,我知道这可能是你能做的最邪恶的事情。我试图了解事件处理程序是如何在语言级别实现的。

了解这如何影响框架 IE React 会很有趣,但这个问题本身集中在浏览器/DOM 上。在这种情况下是“真正的”onChange。

示例

<html>
<head>
<script type="text/javascript>

//is there anything we can do here to make the onchange below
//do something with the 5 it returns?

//for example, maybe console.log it, or redux dispatch it?

</script>
</head>
<body>

<input type="text" onChange="function(event){return 5;}" />

</body>
</html>

最佳答案

是的,您可以通过更改 EventTarget 原型(prototype)中的 addEventListener 函数来实现此目的。考虑以下示例:

const oldAddEventListener = EventTarget.prototype.addEventListener;
EventTarget.prototype.addEventListener = function(eventName, eventHandler, useCapture) {
const modifiedEventHandler = function(event) {
if (event.type === 'change') {
//dispatch your action here
store.dispatch(....);
}
eventHandler(event);
};
oldAddEventListener.call(this, eventName, modifiedEventHandler, useCapture);
}

如果事件类型为“change”,它将首先运行 if (event.type === 'change') {...} block 中的自定义代码,然后继续正常流程,调用事件处理函数。否则,它只会调用正常流程中的事件处理函数。

我不建议在严肃的项目中改变 EventTarget 原型(prototype),因为它可能会导致不可预见的问题,特别是当您使用第三方脚本时。但出于教育目的,我建议尝试一下原型(prototype)并改变 javascript 的原始行为,因为它可以帮助您更好地理解 javascript。另外,原型(prototype)很有趣! =)

关于javascript - 你可以全局改变 onChange 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54817226/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com