Я не могу изменить значение класса через JavaScript! - PullRequest
0 голосов
/ 27 мая 2011

Я пытался сделать это безрезультатно :( Из того, что я исследовал, есть два способа изменить указанное значение класса в JavaScript:

document.getElementById (v) .setAttribute (attribute, value);

или

document.getElementById (v) .className = value;

Однако,Я попробовал оба, и они делают приседания :( Я потратил весь день вчера, чтобы понять это безрезультатно: (

Вот мой код:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html>
  <head>
    <title>Checklist</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <link rel="stylesheet" type="text/css" href="/systems_hr/Style%20Library/globalstyles_test.css">
    <style type="text/css">
      #innerframe {
                width: 100%;
                height: 63em;
        }
    </style>
    <script type="text/javascript" src="/systems_hr/Style%20Library/JavaScripts/styles.js"></script>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/jquery-ui.min.js"></script>    
    <script type="text/javascript">    
      /* I'll clean this one up. Didn't want to play nice with styles.js
      var x = 0;
      var p = new Array(3) 

      for (x = 1; x < 4; x++)
      {
        p[x] = new Image();
        p[x].src = "/systems_hr/onboarding/Custom%20Pages/Checklist%20EN/images/id1-" + x + ".png";
      } 
      */

      var p0 = new Image();
      p0.src = "images/id1.png";

      var p1 = new Image();
      p1.src = "images/id1-1.png";

      var p2 = new Image();
      p2.src = "images/id1-2.png";

      var p3 = new Image();
      p3.src = "images/id1-3.png";  

      var p4 = new Image();
      p4.src = "images/id2.png";

      var p5 = new Image();
      p5.src = "images/id2-1.png";

      var p6 = new Image();
      p6.src = "images/id2-2.png";

      var p7 = new Image();
      p7.src = "images/id2-3.png";    

      var p8 = new Image();
      p8.src = "images/id3.png";

      var p9 = new Image();
      p9.src = "images/id3-1.png";

      var p10 = new Image();
      p10.src = "images/id3-2.png";

      var p11 = new Image();
      p11.src = "images/id3-3.png";       

      var p12 = new Image();
      p12.src = "images/id4.png";

      var p13 = new Image();
      p13.src = "images/id4-1.png";

      var p14 = new Image();
      p14.src = "images/id4-2.png";

      var p15 = new Image();
      p15.src = "images/id4-3.png"; 

      function changeFrame (frameSRC)
      {
        var myFrame = document.getElementById('fraContent'); 
        myFrame.contentWindow.location =  frameSRC;
      }

      function changeTab(tab)
      { 
        alert(tab);  
        switch(tab)     
        {
          case 0:         
            document.getElementById("week1").className = "active";
            test('week1');
            document.getElementById("month1").className = "active"; 
            test('month1');        
            document.getElementById("day1").className = "current";   
            test('day1');  
          case 1:
            document.getElementById("day1").className = "active";
            document.getElementById("month1").className = "active";         
            document.getElementById("week1").className = "current";
          case 2:
            document.getElementById("week1").className = "active";
            document.getElementById("day1").className = "active";         
            document.getElementById("month1").className = "current";
        }  

      }

      function test(tab)
      {
        alert(document.getElementById.id + " " + document.getElementById(tab).className)
      }
    </script>

  </head>
  <body>
  <table border="0" width="100%">
  <tr>
    <td colspan="2" align="left">
      <div id="navcontainer">
        <ul id="navlist">
          <li><a href="#" class="active" id="day1" onclick="changeTab(0);">FIRST DAY</a></li>
          <li><a href="#" class="active" id="week1" onclick="changeTab(1);test('day1');test('week1');test('month1');">FIRST WEEK</a></li>
          <li><a href="#" class="active" id="month1" onclick="changeTab(2);">FIRST 30-DAYS</a></li>
        </ul>
      </div>
      <div id="page_viewer">
          <table border="0" width="1020px" cellpadding="0" cellspacing="0">
          <tr>
            <td>
              <img src="images/id1.png" style="border: 0px; width: 1000px; height: 72px;" alt="" usemap="#imgTabMap" name="imgTab">
                <map id="imgTabMap" name="imgTabMap">
                  <area shape="rect" alt="" title="" coords="7,11,166,60" href="" name="area1" onclick="changeFrame('D1.html')">
                  <area shape="rect" alt="" title="" coords="206,10,365,59" href="" target="_self" onMouseOver="changeImageSrc('imgTab','p1')" onMouseOut="changeImageSrc('imgTab','p0')" name="area2" onclick="changeFrame('D2.html')">
                  <area shape="rect" alt="" title="" coords="405,11,566,59" href="" target="_self" onMouseOver="changeImageSrc('imgTab','p2')" onMouseOut="changeImageSrc('imgTab','p0')" name="area3" onclick="changeFrame('D3.html')">
                  <area shape="rect" alt="" title="" coords="605,10,763,60" href="" target="_self" onMouseOver="changeImageSrc('imgTab','p3')" onMouseOut="changeImageSrc('imgTab','p0')" name="area4" onclick="changeFrame('D4.html')">
                  <area shape="rect" alt="" title="" coords="805,9,963,60" href="" target="_self" onMouseOver="changeImageSrc('imgTab','p4')" onMouseOut="changeImageSrc('imgTab','p0')" name="area5">
                  <!-- Created by Online Image Map Editor (http://www.maschek.hu/imagemap/index) -->
                </map>

            </td>
          </tr>
          <tr>
            <td width="100%">
              <iframe name="fraContent" id="innerframe" src="D1.html" frameborder="0" scrolling="no" width="1000px"></iframe>
            </td>
          </tr>
          </table>
      </div>
      </td>
    </tr>
  </table>
  </body>
</html>

Я знаю, что есть многоиз-за грубого кода, но мне не хватает времени, и я еще не очень хорошо разбираюсь в синтаксисе JavaScript.

Вот особенности моего кода и то, что я пытаюсьдля выполнения:

Я использую глобальный код CSS для сайта, поэтому большинство моих объявлений хранятся там. Я сделал код javascript собственными силами (так сказать) на данный момент. Если это работаетОднако я планирую добавить это в глобальный репозиторий JavaScript для моего сайта ( styles.js один). Я добавил jQuНачните со всеми намерениями использовать его позже (пока нет, потому что сейчас я просто пытаюсь изучить его).

Хорошо, теперь, как вы видите, этот фрагмент кода простоинтерфейс с вкладками.Вот код CSS для моих вкладок:

/* CSS Tabs */
#navlist {
        padding: 3px 0;
        margin-left: 0;
        border-bottom: 1px solid #778;
        font: bold 12px Verdana, sans-serif;
}

#navlist li {
        list-style: none;
        margin: 0;
        display: inline;
}

#navlist li a.active {
        padding: 3px 0.5em;
        margin-left: 3px;
        border: 1px solid #778;
        border-bottom: none;
        background: #DDE;
        text-decoration: none;
}

#navlist li a:link { color: #448; }
#navlist li a:visited { color: #448; }

#navlist li a.active:hover {
        color: #000;
        background: #AAE;
        border-color: #227;
}

#navlist li a.current {
        padding: 3px 0.5em;
        margin-left: 3px;
        border: 1px solid #778;
        border-bottom: 1px solid white;
        text-decoration: none;
        background: white;
        cursor: text;
}

#navlist li a.current:hover {
        background: white;
        border-bottom: 1px solid white;
        cursor: text;
        color: #448;
}

#navlist div #content {
        font-size: 1em;
}

Предполагается, что вкладки изменяют содержимое iframe при нажатии.Задача проблемного кода JavaScript состоит в том, чтобы просто изменить внешний вид нажатой вкладки.В приведенном выше коде CSS это класс с именем «текущий», в то время как стилем по умолчанию является класс «активный».

Код, который должен обрабатывать изменения - это changeTab (tab).Во-первых, я установил для всех вкладок класс по умолчанию «активный».Когда я нажимаю на вкладку, должен появиться changeTab (также onLoad, но я не добавил его первым).И вот тут у меня проблемы.Значения класса не изменяются на целевой вкладке.

Сначала я добавил несколько кодов перехвата, чтобы посмотреть, работает ли событие onClick (причина, по которой я добавил код предупреждения в функцию changeTab).Затем я добавил код, который позволяет мне увидеть окончательные значения атрибута класса (функция test (tab) ).Он должен отображать идентификатор тега и значение его атрибута class.

Когда я его опробовал, я получаю переданный параметр в changeTab, который сообщает мне, что onClick работает.Но тест говорит мне, что тег не определен.Таким образом, «текущий» класс применяется к последней вкладке («month1») независимо от того, на какую вкладку я нажимаю.

Мой рабочий браузер - IE8, и, поскольку это сайт внутренней сети компании, я нене требуется, чтобы он был совместим с другими браузерами, поскольку наша компания хочет, чтобы мы использовали IE исключительно для задач, связанных с работой.

Пожалуйста, помогите :( также, если вы можете порекомендовать альтернативы тому, что я делаю, пожалуйста,не стесняйтесь давать им:)

Большое спасибо,

Poch

Ответы [ 2 ]

2 голосов
/ 27 мая 2011

Вы забыли поставить break; в ваших случаях:

case 0: 
  ...
  break; 
case 1: 
  ...
  break; 
...
0 голосов
/ 27 мая 2011

Я покалечен использованием jQuery так долго, что забыл, но попробуйте вызвать removeAttribute перед setAttribute.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...