1

我有这个代码:

$("#Editing").click(function(){
  if ($(this).attr("class","OptionsOpt-On")) 
    {$(this).attr("class","OptionsOpt-Off"); Edit = false;}

  else if ($(this).attr("class","OptionsOpt-Off")) 
    {$(this).attr("class","OptionsOpt-On"); Edit = true;}
});

我已经搜索过但无法找到类似的答案,因为我发现的所有问题都与我已确定不在我的代码中的代码存在问题。我不知道为什么“else if”不起作用,但是如果我将其更改为 if,它就可以正常工作...

4

2 回答 2

4

attr带有 2 个参数 = setter = 返回一个 jQuery 对象,它始终是一个真实的值。

您应该将其用作吸气剂并进行比较:

if ( $(this).attr("class") === 'OptionsOpt-On' ) {
//...

虽然.hasClass()在这种情况下可能更合适:

if ( $(this).hasClass('OptionsOpt-On') ) {
    //...
} else {
    //...
}

由于您的元素不能同时具有两个类,因此您不需要ifelse.


还假设元素以您可以.toggleClass()用来切换两个类的类之一开始,而无需条件语句:

$("#Editing").click(function(){
    $(this).toggleClass('OptionsOpt-On OptionsOpt-Off');
    Edit = $(this).hasClass('OptionsOpt-On');
});

小提琴

于 2013-04-14T23:16:07.283 回答
1

也许您正在尝试这样做:

if ($(this).attr("class")=="OptionsOpt-On")

与两个参数一起使用时,该.attr函数用作 setter,而用作仅具有一个参数的 getter。

于 2013-04-14T23:15:53.623 回答