Почему вертикальная полоса прокрутки перемещается автоматически?

Я не понимаю, почему вертикальная полоса прокрутки перемещается автоматически в большую часть ключевой позиции, когда "Строка 9" нажала, например. Дальнейшие щелчки не перемещают полосу прокрутки. Кто-либо мог объяснить, почему, и как зафиксировать это? Я работаю с Firefox 3.6.3.

HTML:

<html>
    <head>
        <link rel="stylesheet" href="test.css" type="text/css" />
        <script src="http://code.jquery.com/jquery-latest.js"></script>
        <script language="JavaScript" src="test.js"></script>
    </head>

    <body>
        <div>
            <table>
                <tr row='0'><td class='column1'>Line 0</td></tr>
                <tr row='1'><td class='column1'>Line 1</td></tr>
                <tr row='2'><td class='column1'>Line 2</td></tr>
                <tr row='3'><td class='column1'>Line 3</td></tr>
                <tr row='4'><td class='column1'>Line 4</td></tr>
                <tr row='5'><td class='column1'>Line 5</td></tr>
                <tr row='6'><td class='column1'>Line 6</td></tr>
                <tr row='7'><td class='column1'>Line 7</td></tr>
                <tr row='8'><td class='column1'>Line 8</td></tr>
                <tr row='9'><td class='column1'>Line 9</td></tr>
            </table>
        </div>
    </body>
</html>

JS:

$(document).ready(function() {
    $(".column1").each(function(index) {
        $(this).after("<td class='column2'>Details " + index + "</td>");
        $(this).toggle(function() { $("[row='" + index + "'] .column2").fadeIn("fast") },
                       function() { $("[row='" + index + "'] .column2").fadeOut("fast") });
    });
});

CSS:

div {
    overflow: auto;
    height: 100px;
    width: 300px;
    border: 1px solid blue;
}

.column1 {
    cursor: pointer;
    width: 100px;
    background-color: green;
    color: white;
}

.column2 {
    display: none;
    width: 200px;
    background-color: blue;
    color: white;
}
9
задан Misha Moroshko 20 May 2010 в 13:55
поделиться

2 ответа

После проведения некоторых тестов методом проб и ошибок, похоже, что это связано с моментом, когда браузер пересчитывает и перерисовывает таблицу, когда вы затухаете/перелистываете одну из ячеек. В вашем коде нет ничего неправильного, и jQuery правильно переключает свойство 'display' ячейки - похоже, что это незначительная ошибка в FF.

Возможно, самый простой способ обойти это - не переключать сами ячейки таблицы, а вместо этого переключать содержимое ячейки column2, например, так:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
    <head>
        <link rel="stylesheet" href="test.css" type="text/css" />
        <script src="http://code.jquery.com/jquery-latest.js"></script>
        <script language="JavaScript">
        $(document).ready(function() {
            $("td.column1").each(function(index) {
                $(this).after('<td class="column2"><span class="details">Details ' + index + '</span></td>');
                $(this).toggle(
                  function(){$(this).siblings('.column2').children('span.details').fadeIn("fast")},
                  function(){$(this).siblings('.column2').children('span.details').fadeOut("fast")}
                ) 
            });
        });
        </script>
        <style type="text/css" media="screen">
          div {
              overflow: auto;
              height: 100px;
              width: 300px;
              border: 1px solid blue;
          }

          .column1 {
              cursor: pointer;
          }

          .column2 .details{
              display:none;
          }

        </style>
    </head>

    <body>
        <div>
            <table>
                <tr row='0'><td class='column1'>Line 0</td></tr>
                <tr row='1'><td class='column1'>Line 1</td></tr>
                <tr row='2'><td class='column1'>Line 2</td></tr>
                <tr row='3'><td class='column1'>Line 3</td></tr>
                <tr row='4'><td class='column1'>Line 4</td></tr>
                <tr row='5'><td class='column1'>Line 5</td></tr>
                <tr row='6'><td class='column1'>Line 6</td></tr>
                <tr row='7'><td class='column1'>Line 7</td></tr>
                <tr row='8'><td class='column1'>Line 8</td></tr>
                <tr row='9'><td class='column1'>Line 9</td></tr>
            </table>
        </div>
    </body>
</html>

Итак, скрипт добавляет ячейку column2, и она остается видимой все время - вместо этого мы показываем/скрываем внутри нее. Я протестировал эту версию в FF 3.6.3, и она ведет себя как надо!

О - и я почистил ваши селекторы jQuery для лучшей производительности. Если вам нужна дополнительная информация о причинах, дайте мне знать!

6
ответ дан 3 November 2019 в 04:41
поделиться

Я скопировал и попробовал ваш код в Firefox 3.6.3 и Chrome 5.0.375.29. И ничего не видел, что вы описали, поэтому я в растерянности.

Полоса прокрутки перемещается только при нормальной прокрутке, а не при нажатии на текст.

1
ответ дан 3 November 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: