消除自执行匿名函数中未定义的TypeError
Eliminate undefined TypeError in self-executing anonymous function
我有一个脚本,当我在浏览器控制台中用Firebug/检查时,它会给我以下错误:'类型错误:clickables[ic]未定义'。我是一个javascript初学者,正试图学习如何用普通javascript做事,所以我正在专门寻找一个解决方案。
问题:如何消除/静音未定义的TypeError
脚本应该做什么:
我使用它来显示隐藏的元素,这些元素的显示属性设置为none。脚本应该获取文档中某个特定类的所有实例,.item-shape,并将其与具有该类的每个项所给定的唯一ID连接,以形成一个新类,通过getElementsByClassName进行搜索。具有.item-sheaw类的项目是单击的项目,取消隐藏/显示的项目具有.ID显示项目类(可单击元素的唯一ID,后面颠倒.item-sheew类名,用于简单约定)。ID根本不用于stying,它只是基于命名约定创建一个唯一的类,该类可以应用于任何一对元素:一个是单击的,一个是通过创建/更改显示属性的样式来取消隐藏/隐藏的。
脚本的作用:
目前,该脚本实际上会在单击时显示项目,并在随后的单击中再次隐藏它们,它可以处理多个项目。所以,它基本上是有效的。我只是不明白"TypeError:clickleables[ic]未定义"的问题以及如何消除它。我在使用开发工具时在几个浏览器中都会遇到它。
这个脚本是一种自动执行匿名函数的尝试,所以我知道惯例有点不同,但我想坚持使用它,这样我就可以将它应用于未来的其他用途。启发它的文章可以在这里找到:
http://esbueno.noahstokes.com/post/77292606977/self-executing-anonymous-functions-or-how-to-write
示例:
HTML
<!-- Item to be clicked, with unique ID -->
<h3 class="item-reveal" id="plan-1">Click for special pricing!</h3>
<p>An introductory paragraph...</p>
<!-- Hidden item to be revealed, will always have a unique class -->
<p class="plan-1-reveal-item">Special, this month only: $49.99</p>
<h3 class="item-reveal" id="plan-b">Click for special pricing!</h3>
<p>An introductory paragraph...</p>
<p class="plan-b-reveal-item">Special, this month only: $29.99</p>
CSS
/* Init - hide/unhide onclicks */
.item-reveal {cursor:pointer;}
[class$="-reveal-item"] {display:none;}
/* Halt - hide/unhide onclicks */
javascript:
var clickables = document.querySelectorAll('.item-reveal');
var clickCount = clickables.length;
(function () {
var Reveal = {
swapThis: function () {
for (var ic = 0; ic <= clickCount; ic += 1) {
// Next line seems to create the error message.
clickables[ic].onclick = function (unhideHide) {
var hidden = this.id;
var findClass = hidden += '-reveal-item';
var revealSwap = document.getElementsByClassName(findClass);
for (rn = 0; rn < revealSwap.length; rn++) {
revealSwap[rn].style.display = (revealSwap[rn].style.display == 'block') ? 'none' : 'block';
}
}
}
}
}
Reveal.swapThis();
}) ();
脚本通过script标记链接,刚好在关闭BODY标记之前。我在HTML文档中尝试过使用Async和Defer属性,使用和不使用其他脚本,结果都是一样的。我尝试添加一个事件处理程序,以确保DOM加载仍在进行中,但我不知道如何真正测试它,看看它是否真的在做什么。单元测试是我刚刚开始尝试熟悉的东西。
在一个完全不相关的行业工作了几年后,我正在努力消除这些技能,所以去年的工作都是为了赶上网络开发技术,学习响应式设计和HTML5数据,并尝试学习javascript。我搜索、阅读并购买了几本电子书/书籍,这是我为数不多的几次遇到我无法理解的事情之一。我想,对于一个有正式编程/脚本知识的人来说,这可能是一件简单而显而易见的事情,但我主修电子商务,网络、营销、服务器/系统支持、布线、HTML/CSS等都是我感到舒适的地方。我们非常感谢您的帮助,但请记住,我正试图在一个没有jQuery的环境/项目中实现这一点。谢谢
您将带着以下内容离开列表的末尾:
for (var ic = 0; ic <= clickCount; ic += 1)
更改为:
for (var ic = 0; ic < clickCount; ic += 1)
clickCount
是列表的长度,因此由于它是基于0的索引,clickables[clickCount - 1]
是列表中的最后一个元素。您试图访问不存在的clickables[clickCount]
。
- TypeError:无法读取属性'推'未定义的JavaScript
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 得到"TypeError:无法读取属性'filename'未定义的“;调用“npm start
- 试图将onChange函数作为道具传递给GrandChlidren,结果是TypeError:这是未定义的
- 角度推入数组给出:TypeError:无法读取属性'推'的未定义
- TypeError:无法读取属性'findAll'的未定义
- Angular2-TypeError:无法读取属性'Id'(Typescript)中未定义的
- TypeError:无法读取属性'会话'的未定义
- TypeError:在Jquery ui datepicker中未定义datepicker_instActive
- "TypeError:t.start未定义”;,在fullcalendar.min.js中,同时在我的网站上使
- CKEditor TypeError:c[a]在CodeIgniter中未定义
- Steam bot错误-TypeError:无法读取属性'0'的未定义
- TypeError:无法读取属性'indexOf'的未定义
- Typescript和Browserify-未捕获的TypeError:无法读取属性'步骤'的未定义
- Sailsjs:TypeError:无法读取属性'name'的未定义
- TypeError:无法读取属性'url'的未定义
- 提供“角服务”;TypeError:无法读取属性'helloConsole'“未定义”;
- *简单*解析云代码查询失败”;TypeError:无法调用方法'获取'未定义的“检索该信息”;
- TypeError Obj.root是未定义的ajax jquery
- JQuery自动完成无法工作,未定义TypeError