intro.js - 在 intro.js 的最后一步之后,onbeforechange 导致错误
问题描述
我需要在加载步骤之前触发对页面的更改。(具体来说,我需要在下一步之前触发一个菜单打开;下一步将突出显示该打开的菜单。)我正在使用 introJS.onbeforechange() 来完成此操作,效果很好。在事件处理程序内部,当到达正确的步骤时,触发菜单打开。该步骤位于页面上步骤的中间。在最后一步之后,介绍在另一页继续。
在页面的最后一步,当我单击右箭头(“下一步”按钮被隐藏)时,这应该会在新页面上重新开始介绍。但取而代之的是,会产生一个错误:
intro.min.js:10 Uncaught TypeError: Cannot read property 'element' of undefined
at J.E (intro.min.js:10)
at J.L (intro.min.js:10)
at l (intro.min.js:10)
这是由 onbeforechange 处理程序的存在引起的。
这是 intro.js 中失败的代码:
if (typeof (this._introBeforeChangeCallback) !== 'undefined') {
continueStep = this._introBeforeChangeCallback.call(this, nextStep.element);
}
onbeforechange 里面的代码块永远不会被触发,也就是说错误是在那之前触发的。如果我删除 onbeforechange 处理程序,则不会出现此类错误。
Onbeforechange 似乎没有处理在最后一步点击右箭头,并且没有办法检测到这一点来扼杀错误。
解决方案
答案有点笨拙。我添加了一个 onchange 处理程序,当该步骤是最后一步时——用户不太可能返回触发菜单打开的步骤——我使用 this._introBeforeChangeCallback = undefined 删除了 onchange 处理程序:
intro.onchange(function ()
{
// last step
if (this._currentStep === 9)
{
this._introBeforeChangeCallback = undefined;
}
});
这确实意味着如果用户返回上一步,菜单将不再打开。
推荐阅读
- python - Keras CNN 自动编码器输入形状错误
- excel - 在甘特图中计算每天的小时数
- image - 在heroku release docker image中没有为进程类型web指定命令
- javascript - 使用序数后缀格式化日期
- kubernetes - 将 Grafana Helm Chart 与 Grafana App For Kubernetes 一起安装
- windows - 我想从一个 perl 脚本运行另一个 perl 脚本,但我需要单独执行它
- java - 如何在android中获取字符串数组
- extjs - 如何在网格中找到行中元素的总和
- python - 将列添加到具有不同值的指定索引处的 csv 文件
- git - Fixup git after a failed filter-branch --tree-filter