在表单提交时,通过jquery修改form里的input值,前端框架react

#1

请教个问题,项目前端框架react,我想注入script。在点击表单提交按钮的时候,通过jquery去修改表单内的文本,然后再提交,怎么实现呢?谢谢

#2

需求
我来自问自答一下,其实需求是这样的,有一个form,里面有一个隐藏的文本框,因为跟用户提交的时间点有关系,所以必须在用户submit的时候,把一个时间戳和随机生成的字符串组合的值填写到隐藏的文本框内。

看了知乎的一个帖子,终于解决了我的问题

ReactDOM 在模拟 onChange 事件的时候有一个逻辑:只有当 input 的 value 改变,ReactDOM 才会产生 onChange 事件。
ReactDOM 里面有个 inputValueTracking类是做这个事情的,其实现原理是使用一个变量 currentValue 存储 input 的最新值,并覆盖掉 input 的 value getter。当其他地方执行了 input.value = xxx 时,会执行 value getter,setter 里面用新 value 更新 currentValue 。当 DOM input 事件触发时,inputValueTracking 会判断 currentValue 和 input 的真实值是不是一致的,如果不一致,就说明发生了变化。只有发生了变化,上层调用方才会模拟出一个 change 事件。所以需要绕过 inputValueTracking 里面覆写的 value setter。

代码如下

       (document).on('mousedown', 'button[type=button]', function() {`
          var $fieldEle = $('input')
          var input = $fieldEle[0]
          var wcode =  Date.parse(new Date()) + Math.floor(Math.random()*900+100)
 
          var setValue = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value').set
          setValue.call(input, wcode)
          var event = new Event('input', { bubbles: true })
          input.dispatchEvent(event)
       })