-1

我想将鼠标悬停和鼠标悬停功能添加到系列类中。所以我在循环中使用带有变量的 JQ 选择器:

for(i=1;i<=2;i++){
    cid='.Cid'+i;
    ccid='.CCid'+i;
    csid='.CSid'+i;     
    $(cid).mouseover(function(){
    $(ccid).addClass("RelatedMainComment");
    $(csid).addClass("RelatedMainComment");
    });
    $(cid).mouseout(function(){
        $(ccid).removeClass("RelatedMainComment");
        $(csid).removeClass("RelatedMainComment");
    });
    }

但它没有正确运行,它似乎添加了最后一个类,在示例中它是类“Cid2”,即 mouseover ande mouseout 函数。所以我又做了一个实验:

i=1;
    cid='.Cid'+i;
    ccid='.CCid'+i;
    csid='.CSid'+i;     
    $(cid).mouseover(function(){
    $(ccid).addClass("RelatedMainComment");
    $(csid).addClass("RelatedMainComment");
    });
    $(cid).mouseout(function(){
        $(ccid).removeClass("RelatedMainComment");
        $(csid).removeClass("RelatedMainComment");
    });
    i=2;

它的结果与前一个相同。此外,如果代码是:

        for(i=2;i>=1;i--){
    cid='.Cid'+i;
    ccid='.CCid'+i;
    csid='.CSid'+i;     
    $(".Cid"+i).mouseover(function(){
    $(".CCid"+i).addClass("RelatedMainComment");
    $(".CSid"+i).addClass("RelatedMainComment");
    });
    $(".Cid"+i).mouseout(function(){
        $(".CCid"+i).removeClass("RelatedMainComment");
        $(".CSid"+i).removeClass("RelatedMainComment");
    });
    }

它行不通。你能解释一下为什么吗?

4

2 回答 2

3

JavaScript 关闭!使用匿名函数i作为参数:

for(i=1;i<=2;i++){
    (function(i) {
        cid='.Cid'+i;
        ccid='.CCid'+i;
        csid='.CSid'+i;     
        $(cid).mouseover(function(){
            $(ccid).addClass("RelatedMainComment");
            $(csid).addClass("RelatedMainComment");
        });
        $(cid).mouseout(function(){
            $(ccid).removeClass("RelatedMainComment");
            $(csid).removeClass("RelatedMainComment");
        });
    })(i)
}
于 2013-10-12T15:22:02.560 回答
1

该变量ccid仅在$(ccid).addClass("RelatedMainComment"); 鼠标悬停时在语句中使用$(cid)

到那时,价值ccid不再是'.CCid'+i而是已经成为'.CCid2',因此它不能像你预期的那样工作。

为了使ccid函数中的变量保持为'.CCid'+i,一种解决方案是使用event.data

于 2013-10-12T15:24:48.890 回答