问题描述
我正在开发针对米哈游简历系统的自动填充功能,需要程序化触发Ant Design日期选择器。遇到了一个非常奇特的问题:
现象:
1. 不打断点:可以触发日期选择器下拉框显示,但没有蓝色选中条
2. 打断点:在inputs[0].dispatchEvent(mousedownEvent);这行打断点后,不仅会显示下拉框,还会出现蓝色选中条,表示日期被正确选中
这个蓝色选中条对于后续操作至关重要,是真正"选中"状态的标志。没有它,后续的日期选择无法正常进行。
### 相关代码
// 初始化准备工作
const rangePickerContainer = findAncestorWithClass(inputElement, "ant-picker-range");
const inputs = rangePickerContainer.querySelectorAll("input");
// 触发事件
const focusEvent = new FocusEvent("focus", {
bubbles: true,
cancelable: true,
view: window
});
inputs[0].dispatchEvent(focusEvent);
const mousedownEvent = new MouseEvent("mousedown", {
bubbles: true,
cancelable: true,
view: window
});
// 在这行打断点后,蓝色选中条出现,一切正常
inputs[0].dispatchEvent(mousedownEvent);
inputs[0].click();
问题分析
似乎打断点改变了事件处理的时序,使得Ant Design组件有足够时间完成内部状态更新。这可能与React的事件系统或Ant Design组件的特定实现有关。
疑问
1. 为什么打断点和不打断点会导致组件表现不同?
2. 如何在不打断点的情况下,让代码实现与打断点相同的效果?
3. 是否有更可靠的方法来程序化触发Ant Design日期选择器的真正选中状态?