Javascript回调和模式匹配帮助
Javascript callback and pattern matching help
我正在尝试制作一个简单的搜索器/荧光笔,我遇到了结果不一致的困难/当我测试出来时什么都没有发生。
我认为最大的差距是我对回调函数应该如何工作以及选择器能够匹配什么的理解。
理想情况下,当点击标签时,一切都应该消失,只有匹配标签的潜水应该重新出现。如果没有匹配,那么没有找到的div应该出现,重置应该淡出,并使所有div (sans nomatchdiv)重新出现,不突出显示。
谁能提供一些澄清我可以改进的地方?
编辑:查看评论中的链接查看我的代码。
对问题的更多澄清:点击一个标签(旧,摄影,指南),然后点击重置。这三个部分都应该重新出现,但只有两个出现了。
随机显示没有发现的结果。
如果您选择了一个标签,然后搜索不同的标签,淡入淡出将是异步的。
问题是.fadeout()
在每个.workshopentry
上,所以实际上是3个淡出。因此动画完成回调函数也被调用了3次!因此,决定显示和隐藏哪些新条目的逻辑被执行了3次,并导致了奇怪的多重衰落。
我已经用一个更健壮的解决方案更新了jsfiddle。
您需要复制以下代码
if (toFadeIn.length < 1) { //No results found
toFadeIn.push(noResults);
}
$(toFadeIn).each(function(index, div){
div.fadeIn(1000);
});
在workshop.淡出的回调函数…像这样:
workshop.fadeOut(1000, function() {
var tags = $('.left ul li', this);
tags.removeClass('searchMatch'); //reset the search results
tags.each(function() {
if ($(this).text().toLowerCase() === searchTerm.toLowerCase()) {
$(this).addClass('searchMatch');
toFadeIn.push($(this).parent().parent().parent());
}
});
if (searchTerm === "") {
toFadeIn.push(workshop);
}
if (toFadeIn.length < 1) { //No results found
toFadeIn.push(noResults);
}
$(toFadeIn).each(function(index, div){
div.fadeIn(1000);
});
});
你看到了什么?淡出回调尚未调用,但您已经开始通过toFadeIn
数组来显示搜索结果。那时,它甚至还没有搜索所有的条目。
这只是因为我们大多习惯了顺序代码,所以回调需要一点头脑。但它确实是这样工作的。你只需要继续把代码放入回调中。然后在另一个回调中,等等
相关文章:
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- Regex模式匹配,从Javascript中的字符串中提取时间,结果出乎意料
- Javascript重复模式匹配,然后输出到文本区域
- 我可以禁用参数模式匹配吗
- JavaScript测验的模式匹配
- RegEx模式匹配101-999
- 使用 Karma,如何排除与模式匹配的所有文件,但特定子文件夹中的文件除外
- 如何使用lodash返回与模式匹配的属性数组
- Regex模式匹配连接
- 正则表达式模式匹配特定单词
- 查找具有与模式匹配的属性的元素
- 在无类型语言中是否存在模式匹配之类的东西
- JavaScript REGEX 模式匹配
- 模式匹配检查范围之间的邮政编码
- gulp.src 排除与模式匹配的所有文件,除了一个 - 不工作
- 忽略模糊匹配并使用 JavaScript 添加精确的单词模式匹配
- 查找与模式匹配的所有子字符串
- 我在这里是否正确使用了模式匹配
- 数字、字母块的正则表达式模式匹配
- Javascript回调和模式匹配帮助