【发布时间】:2018-04-10 16:19:48
【问题描述】:
抱歉,如果之前有人问过这个问题 - 我搜索并没有找到与我所看到的完全匹配的任何内容。
情况如下:我正在使用 jQuery UI 选项卡来选择页面上的图像。对于其中一个选项卡,所需的结果是点击该选项卡的链接,打开一个新的 browser 选项卡(我将尝试在此处直接使用“选项卡”一词),并忽略其余的 UI 选项卡代码。所以本质上,我希望 Tabs 创建可视选项卡以供选择,但不执行任何通常的 jQuery 处理,当单击该特定选项卡时会发生这种处理。对于其他选项卡,默认的 UI 选项卡行为很好。
我想我可以做的是将一个事件附加到该选项卡并调用 event.stopPropagation() 这将防止 UI 代码冒泡,然后让它通过并获取链接(选项卡的单击事件是在“a”标签上)。我确实设置了它,以便我的事件代码排在第一位,它在 UI 代码之前执行,它会阻止 UI 代码运行。
但是,如果我这样做,我会在控制台中看到以下消息:
跨域请求被阻止:同源策略不允许读取 [link] 处的远程资源(原因:缺少 CORS 标头“Access-Control-Allow-Origin”)。
(注意:该链接指向不同域中的交互式页面,这是我打开新浏览器标签的主要原因)
新的浏览器选项卡没有打开,我只剩下选定的选项卡,下面有空白内容。
如果我在 stopPropagation 之前为链接执行“window.open”并添加 event.preventDefault(),我确实会在新的浏览器选项卡中获得页面打开的结果,但仍会看到错误消息。由于手指有些粗,我还注意到,如果我在点击事件代码中有一个未定义的函数,它也会有预期的反应。
无论如何,我在这里没有看到什么愚蠢的东西吗?我是否应该对一个解决方案感到满意,该解决方案给我带来了结果行为但出现了错误消息?
非常感谢!
【问题讨论】:
-
经过进一步审查,jQuery UI 事件处理程序正在触发——这就是为什么我最终选择了那个特定的选项卡。跨域错误在那里是有意义的,因为“a”标签指出了我的域。因此,即使我调用了 stopPropagation 并且之后 isPropagationStopped 为 TRUE,jQuery UI 代码仍然会执行。
标签: jquery-ui jquery-ui-tabs stoppropagation