怎么捕获input hidden的 value变更

目录
文章目录隐藏
  1. 解决方案

onChange 事件触发的机制,当 input 表单控件发生变化时,并且 input 触发失焦,则会触发 Change 事件。

像 Onchage 标准文档描述,显然 <input type=”hidden” /> 不符合这个标准。 本文主要讨论, input type = hidden 元素,当 value 发生变更时,如何捕获值的变更。

解决方案

IE9 及以下 IE 类浏览器

虽然 onChange 事件无法触发, 但是旧的 IE 浏览器,是有自己的私有事件 onpropertychange 。 这个事件是在表单控件所以属性发生变化时候触发。 当然可以做为 value 变更的替代来使用。可惜限制条件特别多。

其他浏览器

根据过往经验, 我们在通过 js 修改 input hidden 的值的时候,同步触发一下事件,是比较合理的解决方案。 示例代码如下:

// DOM 
// <input type="hidden" id="hidden-input" onchange="console.log('hello world')">
    
// script 
document.getElementById("hidden-input").value = "new value";
document.getElementById("hidden-input").onchange();

通过 MutationObserver 解决

像传统的解决方案,每次赋值手动触发一下。 显得很不优雅。

在 IE 11 以上 及 chrome 等现代浏览器,我们可以比较优雅的解决这个问题。

示例解决代码:

var obsever = new MutationObserver(function(mutations, obsever) {
                mutations.forEach((mutation) => {
                    switch (mutation.type) {
                        case "attributes":
                            switch (mutation.attributeName) {
                                case "value":
                                    obsever.dispatch(new UIEvent('change'))
                                break;
                            }
                        break;
                    }
                });
            });
obsever.observe(document.getElementsById('hidden-input'), {
    attributeFilter: ["value"],
})

 

「点点赞赏,手留余香」

0

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
码云笔记 » 怎么捕获input hidden的 value变更

发表回复