我正在使用MDL选项卡组件 . 单击选项卡并显示该选项卡的内容后,我想将光标焦点设置在该选项卡内容中的某个文本输入中 .
我最初的方法是处理tab元素的click事件,然后相应地设置焦点 . 我遇到的问题是在文本输入元素上调用.focus()是行不通的,因为它试图在文本元素实际可见之前设置焦点,这似乎没有浏览器为你做的 . 如果我将焦点设置在setTimeout()延迟中它可以工作,但这并不是一种非常干净的方法 .
单击选项卡并完成显示内容后,是否可以处理任何类型的事件?我还研究了使用变异观察器来检测文本输入元素何时可见,但浏览器支持仍然相当有限 .
2 回答
不,没有这样的选择 . 我认为你必须使用setTimeout或setInterval
你可以查看来源 . 也许编写自己的MaterialTabs构造函数并注册它 .
Material-Design-Lite source, MaterialTab
我认为还有一些lib可以像jQuery一样做到这一点 . 你也可以看到
https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver
这仅适用于现代浏览器,但具有遗留实现 .
我已将这一行:
window.dispatchEvent(new Event("tabSelected"));
添加到selectTab()
函数末尾的material.js文件中 . 这样,在显示选项卡内容后立即触发事件 .