2013-03-02 108 views
0

我经历了几个小时的突然愤怒,愤怒,震惊 - 也许只是简单的怀疑 - 在这里发生了什么,我来到这里。无法改变多个班级名字

我试图在冗长的脚本中创建最简单的函数 - 通过Id获取元素,然后根据变量更改类的一部分。听起来很简单吧?下面是相关的代码:

{literal} 
// check to see what kind of ban is this based on the ban_until and ban_at columns in table banlist from return data of /inc/classes/bans.class.php 
var banduration = {/literal}{$ban.until - $ban.at}{literal}; 
if (banduration !== 1 || 0) { 
    var bantype = ((banduration < 0 || banduration > 3600) ? "ban" : "warning"); 
} 
// replace all classnames with others in case this is a warning/ban, and END the script before it also changes modnames 
if (bantype === "warning" || "ban") { 
      document.getElementbyId("modname_message_background").className = "common_background " + bantype + "_background"; 
      document.getElementById("modname_message_bottomribbon").className = "common_bottomribbon " + bantype + "_bottomribbon"; 
      document.getElementById("modname_message_letterbox").className = "common_letterbox " + bantype + "_letterbox"; 
      document.getElementById("modname_message_modname").className = "common_modname " + bantype + "_modname"; 
      document.getElementById("modname_message_servertime").className = "common_servertime " + bantype + "_servertime"; 
      document.getElementById("modname_message_signature").className = "common_signature " + bantype + "_signature"; 
      document.getElementById("modname_message_topribbon").className = "common_topribbon " + bantype + "_topribbon"; 
      document.getElementById("modname_message_username").className = "common_username " + bantype + "_username"; 
     } 

这是相当不言自明:这是一个Smarty的模板,$ban.until是禁令结束的UNIX时间,$ban.at是UNIX时间,这是应用,等等在等等。但是,当我运行这个脚本时,这个脚本旨在根据个人调节者等级(稍后但我离题)和消息类型(消息,警告或禁止)来更改禁止消息。当我插入这个时,只使用第一行。激动不已,我花了两个小时以不同的方式重复多次,绝对无济于事。愤怒与我自己,我写这个:

if (bantype == "warning" || "ban") { 
    var list = ["modname_message_background","modname_message_bottomribbon","modname_message_letterbox","modname_message_modname","modname_message_servertime","modname_message_signature","modname_message_topribbon","modname_message_username"]; 
    var secondlist = ["background","bottomribbon","letterbox","modname","servertime","signature","topribbon","username"]; 
    for (var i=0;i<list.length;i++) { 
    document.getElementById(list[i]).className = "common_" + secondlist[i] + " " + bantype + "_" + secondlist[i]; 
    } 
} 
return; 

这也没有工作。我很怀疑 - 打败了,我来到这里,恳求我不得不错过的可笑简单的错误,因为只有那么简单的事情才是这样的麻烦。

我可以确认变量banduration正在完美工作(使用alert)。

回答

2
if (bantype === "warning" || "ban") 

不符合您的想法。这相当于:

if ((bantype === "warning") || "ban") 

这始终是真实的,因为"ban"不假。它应该是:

if (bantype === "warning" || bantype === "ban") 

和:

if (banduration !== 1 || 0) 

应该是:

if (banduration !== 1 && banduration !== 0) 
+0

非常感谢您的澄清,我还是有点新的。不幸的是,这个问题似乎仍然存在,因为它好像脚本中途停下来 - 我在第二个关闭护腕之后加了一个'alert(bantype)',而且我不幸也没有弹出任何弹出窗口。和以前一样,只有第一行(modname_message_background)会受到适当的影响,但其他元素似乎仍然保持原样。 – user1649077 2013-03-02 12:05:08

+0

我没有看到任何理由为什么只有一个className设置会生效。如果它进入了“if”的身体,它应该做到这一切。你在Javascript控制台上收到任何消息吗? – Barmar 2013-03-02 12:11:08

+0

这很有趣。它说[12:13:01.335] TypeError:document.getElementById(...)为null,但这只是无稽之谈 - 我在Phpstorm中打开该文件,并通过自动填充功能将这些ID记录下来。你有什么想法返回null是什么意思? – user1649077 2013-03-02 12:23:20