继续进行 API 重构,我们对对话框小部件有一些计划的更改。我们知道这种 API 更改并非没有代价,因此我们想明确说明,除了特别说明的地方之外,**1.9 中的 jQuery UI 对话框也将支持 1.8 API**,并且弃用的 API 不会在 jQuery UI 2.0 之前删除。阅读有关完整jQuery UI API 重构的更多信息。
API 重构
在对话框中包含焦点
我们目前仅在模式对话框中包含焦点。我们将更改此行为以始终包含焦点,即使在非模式对话框中也是如此。这将使我们更符合DHTML 风格指南。我们不确定是否要实现一个将焦点从对话框中移出的键命令(例如 F6),因为这将需要定义一个系统来跟踪焦点应移到哪里。
允许禁用对话框
对话框目前不支持禁用。它们确实继承了添加 `ui-state-disabled` 类的默认行为,这使对话框看起来已禁用,但用户仍然可以与对话框中的元素交互。为了支持禁用对话框,我们将在对话框上放置一个 div 以防止鼠标交互。
能够配置哪个元素获得焦点
打开对话框时,我们会搜索可获取焦点的元素,并聚焦我们找到的第一个元素。如果没有可获取焦点的元素,则会将焦点设置在对话框本身。我们将添加一个 `autoFocus` 选项,它将允许自定义哪个元素获得焦点。该选项将接受一个函数,该函数将返回要聚焦的元素。该选项的默认值为当前实现。如果使用该选项没有找到任何元素,则将聚焦对话框。
在销毁时将对话框移回原始 DOM 位置
创建对话框时,它们会移到正文的末尾。对话框销毁时,它们目前会保留在正文的末尾。我们将更改此行为,以便对话框如果可能,则返回到原始位置。这将通过在创建时跟踪一个兄弟元素或父元素来完成。
自动堆叠
`stack` 选项控制当对话框获得焦点时它是否会移动到其他对话框之上。由于这应该是始终如此,我们将删除该选项并强制执行该行为。此外,我们可能会删除 `moveToTop` 方法,因为适当的对话框应始终可供用户使用,具体取决于它们何时打开以及它们是模式还是非模式的。
更合理的模式
用于管理模式对话框的当前实现有点笨拙,会比较元素的 z-index,并且经常会导致问题。我们计划简化实现,并改为使用基于层次结构的解决方案,而不是基于样式的解决方案。
反馈
我们很乐意听到您对这些更改的反馈。我们希望确保在最终确定和实施这些更改之前,我们能解决社区可能遇到的任何问题。如果您有任何反馈,请在相关的论坛帖子上发布。谢谢。