React渲染输入的触发器更改事件(类型=范围)
“反应”:“^ 15.4.2”
我无法从jquery触发使用React呈现的输入的更改事件。 我需要做一些端到端的测试。
这是一个沙箱作为一个完整的展示: https ://codesandbox.io/s/pp1k1kq3om已经加载了jquery。
如果你在控制台中运行:$(’#reactSlider’)。val(50).change(),你会注意到没有调用更改处理程序。
在上面的沙箱中还有一个纯html滑块用于比较,一个按预期工作(调用更改函数)。
还试图派出这样的新事件:
var event = new Event('change') var target = $('#reactSlider')[0]; target.dispatchEvent(event);
以上也不起作用(并且可以在纯html滑块上工作)。
import React from "react"; import { render } from "react-dom"; const changeHandler = event => { alert(`react slider changed:${event.target.value}`); }; const App = () => ( run in the console: $('#reactSlider').val(50).change()
Notice that for the React slider, the change event is not triggered.
); render(, document.getElementById("root"));
好的,所以我找到了一种解决方法。 看起来onInput事件可以被触发就好了。 在输入类型=’范围’的情况下,“输入”事件在与“更改”相同的情况下被触发,因此我能够切换它。
解决方法是:使用onInput而不是onChange并像这样触发它:
function triggerChange(selector,evt) { let ev = new Event(evt, { bubbles: true }); let el = $(selector)[0] el.dispatchEvent(ev); }; triggerChange('#reactSlider','input');