谢谢大家,请问如何监听一个页面所有的input值的变化,包括type="hidden" 隐藏的input?

我们后台有页面,需要监听用户是否新增或者编辑,或者删除 修改等操作,是否做了这些操作的地方很多,但是唯一的共性是会改变input的值,包括隐藏的input,我们想根据用户是否做了这些操作,在用户离开页面的时候,提示是否离开页面,请问如何实时监听这些input值的变化,后台是jquery开发的,谢谢大家

阅读 3k
2 个回答

可以从全局监听change事件来监听

document.addEventListener('change', function(){
    //...
})

但是这种监听对.value赋值的方式无效(change只会对用户手动通过键盘修改的方式触发)

input.value = 'xxx' // 不会触发change回调

因此,我们需要改写一下原生的.value方法

var desc = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')
Object.defineProperty(HTMLInputElement.prototype, 'value', {
    ...desc,
    set(v) {
        console.log('set',v);
        desc.set.call(this, v)
    }
})
这个问题可以参考之前这个回答 https://segmentfault.com/q/10...

这样所有只要有value改变都可以监听到了

可以使用MutationObserver这个方法来观测DOM变化, 只要操作了DOM都可以检测到

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题