Javascript jQuery代码行为错误
jQuery没有按它应该的方式工作,并且完全忽略了逻辑 如果单击某个链接,它将显示给定的说明,并淡出其他菜单。Javascript jQuery代码行为错误,javascript,jquery,html,jquery-plugins,Javascript,Jquery,Html,Jquery Plugins,jQuery没有按它应该的方式工作,并且完全忽略了逻辑 如果单击某个链接,它将显示给定的说明,并淡出其他菜单。 如果我再次单击同一链接,它将隐藏该描述,并将其他链接淡入 但它只是隐藏文本,不会将其淡入。 当从控制台单独运行代码时,当您单击段落旁边的空白时,它工作得很好 jQuery: $('a[class]').click(function(){ var clas = $(this).attr('class'); $('#'+clas.substring(0,2
如果我再次单击同一链接,它将隐藏该描述,并将其他链接淡入 但它只是隐藏文本,不会将其淡入。
当从控制台单独运行代码时,当您单击段落旁边的空白时,它工作得很好 jQuery:
$('a[class]').click(function(){
var clas = $(this).attr('class');
$('#'+clas.substring(0,2)).fadeTo('fast',1).removeClass('faded');
$('p:not(#'+clas.substring(0,2)+')').fadeTo('fast',0.3);
$('.ans:visible').toggle('slow');
$('#'+clas.substring(0,2)+'a'+':hidden').fadeIn('slow');
$('p:not(#'+clas.substring(0,2)+')').addClass('faded');
return false;
});
$('p:not(p.faded)').click(function(){
$('.ans:visible').toggle('slow');
$('p[class="faded"]').fadeTo('fast',1).removeClass('faded');
});
HTML:
1。címre a karakter nevével。
OC katés fillyket NEM adok hozzá。
2。奥尔达拉,阿霍尔·基瓦拉施塔托德·凯德文。
Haználhatod továbbáa“Véletlenszerűkarakter”链接是。
3。weboldal pónisított változataként indult,
德阿佐塔·马尔·纳吉·梅尔特·卡本·托瓦布·费耶尔·德奥特·阿兹·奥尔达尔(de azóta már nagy mértékben továbbfejlődött az oldal)。
我钦佩你的自信:你的代码不起作用,所以你认为问题出在jQuery上
在代码中,此语句:
$('p:not(p.faded)').click(function(){
…将单击处理程序绑定到当时没有“褪色”类的任何元素。这将是所有元素,因为最初没有任何元素褪色。如果希望它仅应用于以后未添加该类的元素,则需要使用委派处理程序,该处理程序通过.on()
(或.delegate()
指定,如果使用的jQuery早于1.7,或.live()
指定,如果使用的jQuery非常旧):
理想情况下,您不会将处理程序绑定到文档
,您应该使用相关段落中最接近的应答器,但由于您没有显示那么多标记,我将把这部分留给您
同样,您返回false从锚元素上的单击处理程序中选择“代码>”,这将阻止单击事件向上传播到段落
然而,我认为你让整个事情变得比你需要的更复杂了。以下代码完成了该任务:
var $questions = $('p'); // add class selectors here
$questions.click(function(){
var $this = $(this),
isOpen = $this.hasClass('open');
$this.fadeTo('fast',1).toggleClass('open',!isOpen)
.find('span.ans').toggle('slow');
$questions.not(this).fadeTo('fast', isOpen ? 1 : 0.2)
.removeClass('open')
.find('span.ans').hide('slow');
});
也就是说,当点击任何段落时,找出它是否已经打开了答案。然后确保单击的选项可见,并切换其答案。然后把它的所有同级段落适当地淡入淡出并隐藏它们的答案
在我的注释“AddClassSelectors here”中,最好添加一个类来识别文档中哪些段落是问题
演示:我永远不会使用jQuery将样式应用到代码中,而是简单地添加和删除类
事情会变得一团糟,有时候,我们可以简化而不是复杂化
下面是一个简单的例子:
相同,但没有
:
添加颜色以便我们知道“引擎盖下”发生了什么,这将让您自己判断。不阅读代码,我诚实地认为,您的行为是错误的。如果您看到自己在一个over上使用了一组选择器,这意味着现在正是考虑将它们缓存在变量中并引用该变量的好时机。它将使您的代码更干净、更可读,因此您将有更好的机会让人们对您的代码感兴趣。@pimvdb将破坏代码,因为它将引用(示例)$('#q2a:hidden')。fadeIn('slow')
@DJDavid98:是的,对不起,我以为它指的是
元素。也许可以尝试删除return false
,因为它可以防止传播到第二个处理程序。@pimvdb关于这一点有一个讨论,所以我需要它。+1到“我欣赏你的自信:你的代码不工作,所以你认为问题出在jQuery上。”我有一个问题。在第一个问题的第一个跨度内还有另一个跨度。这会在显示文本时隐藏它。对不起,是的,我应该在两个.find()
语句中的选择器中使用“ans”
类。答案和演示更新。如果我使用列表元素,你的答案会很好。实际上我想使用类,但是我会丢失jQuery的淡入淡出动画。。。我永远不会使用一个用于显示文本而不是创建块的
图形。。。只需在每个答案中使用
,您将得到相同的答案
$(document).on('click', 'p:not(p.faded)'), function() {
var $questions = $('p'); // add class selectors here
$questions.click(function(){
var $this = $(this),
isOpen = $this.hasClass('open');
$this.fadeTo('fast',1).toggleClass('open',!isOpen)
.find('span.ans').toggle('slow');
$questions.not(this).fadeTo('fast', isOpen ? 1 : 0.2)
.removeClass('open')
.find('span.ans').hide('slow');
});