js改变页面上输入框的值

方案一(大众方案包含vue和原生js的输入框)

// 填写输入框内容,并且赋值给输入框
function fillInput(input, value) {
    input.value = value;
    input.dispatchEvent(new Event('input', {
        bubbles: true,
        cancelable: true,
        composed: true
    }));
    // 所以输入框加了校验的为什么还要触发change事件有待考究
    input.dispatchEvent(new Event('change', {
        bubbles: true,
        cancelable: true,
        composed: true
    }));
}

方案二(针对react框架)、
如果你确定 input 元素存在,并且没有语法错误或其他JavaScript错误导致代码未能执行,但是值仍然没有设置,可能有以下原因:
输入框可能有保护措施:
一些前端框架或自定义JavaScript代码可能会阻止非用户交互的值变更,以避免潜在的XSS攻击或不当操作。
输入框可能是由React或其他现代JavaScript框架管理的:
这些框架通常不会监听 DOM 元素的直接变更,而是有自己的状态管理系统。如果你直接更改 DOM,框架的状态不会更新,因此它将在下一次状态同步时覆盖你的变更。

输入框可能有额外的事件监听器:
可能有其他事件监听器(如 keyup, keydown, focus, blur 等)对值变更有影响。
如果你怀疑这个输入框是由React或类似的框架管理的,你可以尝试模拟更像用户的行为。下面是一个针对React管理的输入框的示例代码:

function setReactInputValue(input, value) {
    let lastValue = input.value;
    input.value = value;
    let event = new Event('input', { bubbles: true });
    // React 15的hack
    event.simulated = true;
    // React 16的hack
    let tracker = input._valueTracker;
    if (tracker) {
        tracker.setValue(lastValue);
    }
    input.dispatchEvent(event);
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值