2011-12-28 49 views
1

看代码:关于“指数”,我认为是正确的,什么时候是错的。我不知道为什么

<div class="test"> 
    <p><a href="#">1</a><a href="#">2</a><a href="#">3</a></p> 
    <div>1</div> 
    <div>2</div> 
    <div>3</div> 
</div> 
<script language="javascript" type="text/javascript"> 
$(".test a").each(function(index,element){ 
    $(element).click(function(){ 
     $(element).toggleClass("hover");     // here works well 
     $(".test div:eq(index)").slideToggle();    // here words wrong! 
     }); 
}); 
</script> 

上面的代码,我认为它应该工作得很好,但我错了。我不知道为什么。 第二个事件:“div”只能滑动第一个,其他div不要滑动,每当你点击哪个“a”标签。

另一种方式是错误的一样:

<script language="javascript" type="text/javascript"> 
$(".test a").click(function(){ 
    x = $(this).index(); 
    $(this).toggleClass("hover");     // here works well 
    $(".test div:eq(x)").slideToggle();    // here words wrong! 
    }); 
</script> 

顺便说一下,我测试.get(index)方法也是如此,浏览器说:它不支持的方法!

有没有高手来解决这个难题?

伙计!通过一次又一次的测试,我终于想通了。让我告诉正确的代码:

A计划:

<script language="javascript" type="text/javascript"> 
$(".test a").each(function(index,element){ 
    $(element).click(function(){ 
     $(element).toggleClass("hover"); 
     $(".test div").eq(index).slideToggle(); 
     }); 
    }); 
</script> 

B计划:

<script language="javascript" type="text/javascript"> 
$(".test a").click(function(){ 
    x = $(this).index(); 
    $(this).toggleClass("hover"); 
    $(".test div").eq(x).slideToggle(); 
    }); 
</script> 

或者只是:

<script language="javascript" type="text/javascript"> 
$(".test a").click(function(){ 
    $(this).toggleClass("hover"); 
    $(".test div").eq($(this).index()).slideToggle(); 
    }); 
</script> 

计划C:来自@ SIME维达斯` s方法

<script language="javascript" type="text/javascript"> 
$(".test").on("click","a",function(){ 
    $(this).toggleClass("hover"); 
    $(this).parent().siblings().eq($(this).index()).slideToggle(); 
    }); 
</script> 

我测试:eq(" + index + ")它不起作用。但.eq(index)效果不错! 在选择器:eq(n)中的意思是,n不能是变量,但是在方法.eq(n)中,n可以是变量?

我测试.on方法,它不适用于jquery-1.6.4.min,但可以很好地适用于jquery-1.7.1.min。

还有一件有趣的事情:计划B,第一个代码,x变量总是0在一些更复杂的条件下,但第二个代码没有这个问题。我还无法弄清楚。

谢谢大家,对于你所有的方法和帮助,没有你,我无法弄清楚这一点。

+1

尝试'$(”测试DIV:EQ( “+指数+”) “)'和'$(” 测试DIV:EQ( “+ X +” )“)'。 – Prusse 2011-12-28 02:09:34

+0

您的HTML结构有缺陷。你应该有两个列表(UL元素) - 一个用于链接,一个用于内容(DIV中的东西)... – 2011-12-28 02:11:16

+1

我也认为你应该将这些链接实际链接到不同的部分。只要给他们唯一的ID和链接像这样:'1'。然后,您也可以使用href值滑动正确的元素+它适用于没有JS的人! – powerbuoy 2011-12-28 02:15:30

回答

0

试试这个:

$('.test').on('click', 'a', function() { 
    $(this).toggleClass('hover'); 
    $(this).parent().siblings().eq($(this).index()).slideToggle(); 
}); 
+0

感谢您的帮助,代码运行良好。 – Michael 2011-12-28 06:37:59

5

您必须打破字符串并将实际index插入到您的选择器中。

变化

$(".test div:eq(index)").slideToggle(); // here works incorrectly! 
}); 

$(".test div:eq(" + index + ")").slideToggle(); // should work now! 
}); 

而对于你的第二个错误是一样的。

变化

$(".test div:eq(x)").slideToggle(); 

$(".test div:eq(" + x + ")").slideToggle(); 
+0

selector':eq(“+ x +”)'不能工作,但方法'.eq(x)'很好。我不知道为什么。 – Michael 2011-12-28 06:40:00

0

试试这个:

<script language="javascript" type="text/javascript"> 
$(".test a").each(function(index,element){ 
    $(element).click(function(){ 
     $(element).toggleClass("hover");     // here works well 
     $(".test div:eq(" + index + ")").slideToggle();    // here words wrong! 
     }); 
}); 
</script> 
0

嗯......也许像这样使用关闭和改变指数的值不字符串名称。

$(".test a").each(function(index,element){ 
    var closureIndex=index; 
    var closureElement=element; 

    $(element).click(function(){ 
     $(closureElement).toggleClass("hover");     
     $(".test div:eq("+closureIndex+")").slideToggle();  
     }); 
}); 
相关问题