JS и Jquery проблема - PullRequest
       1

JS и Jquery проблема

0 голосов
/ 02 января 2011

Привет, у меня проблема, скрипт.js дает мне

<div id="gracze">
  <div id="10" class="char" style="z-index: 19; top: 592px; left: 608px; "></div>
  <div id="14" class="char" style="z-index: 25; top: 784px; left: 608px; "></div>
</div>

вместо

<div id="gracze">
  <div id="4" class="char" ... ></div>
  <div id="10" class="char" style="z-index: 19; top: 592px; left: 608px; "></div>
  <div id="14" class="char" style="z-index: 25; top: 784px; left: 608px; "></div>
</div>

get_players.php

4/62/6
10/19/19
14/19/25

script.js

function get_players()
{
    $.ajax({   
    type:   "POST",
    url:    "get_players.php",   
    dataType: "html",  
    success:  function(data) {
        var str = data;
                var chars = str.split("<br />");
                var lol = chars.length;
                for(var i = lol; i--; ) {
                    chars[i] = chars[i].split('/');
                    var o = document.getElementById(chars[i][0]);
                    var aimt = i;
                    if (!o) {
                        if (aimt!=chars.length-1 && aimt != 0) {
                            $('#gracze').html('<div id="'+chars[aimt][0]+'" class="char"></div>'+$('#gracze').html());
                            $('#'+chars[aimt][0]).css("top", chars[aimt][2]*32-16+"px");
                            $('#'+chars[aimt][0]).css("left", chars[aimt][1]*32+"px");
                            $('#'+chars[aimt][0]).css("z-index", chars[aimt][1]*32);
                        }
                    } else {
                        $('#'+chars[aimt][0]).animate({
                            "top": chars[aimt][2]*32-16+"px", "left": chars[aimt][1]*32+"px"
                        }, { duration: 275});
                        //$('#'+chars[aimt][0]).css("top", chars[aimt][1]*32-16+"px");
                        //$('#'+chars[aimt][0]).css("left", chars[aimt][2]*32+"px");
                        $('#'+chars[aimt][0]).css("z-index", chars[aimt][2]);
                    }
                }
        }});
    setTimeout("get_players();", 1000);
}

Я думаю, это из-за for(var i = lol; i--; ) {

Ответы [ 2 ]

1 голос
/ 02 января 2011

Измените цикл следующим образом:

for(var i = lol - 1; i >= 0 ;i-- )

Индексы массива Javascript начинаются с 0 и заканчиваются размером массива -1 (поэтому, если массив имеет 5 элементов, первый будет иметь индекс 0, а последний из 4).

Ваш первоначальный цикл начинается с размера массива, сразу же уменьшая его (чтобы был доступен последний элемент). Цикл продолжается до тех пор, пока переменная не уменьшится до 0, и в этот момент цикл будет существовать без использования элемента first .

См. на этой странице о циклическом перемещении массивов в javascript.


Кроме того, это условие if (aimt!=chars.length-1 && aimt != 0) специально исключает последний элемент. Удалить && aimt != 0.

0 голосов
/ 02 января 2011

Так как вы делаете обратный цикл, я бы использовал вместо него while.

var i = chars.length;
while( i-- ) {
    //...and so on
}

Это будет быстрее, даст вам правильное значение i внутри телацикла, и все равно завершит цикл в нужное время.

Причина, по которой это работает, заключается в том, что я некоторое время использовал пост-декрементный оператор.Это означает, что значение i здесь:

while( i-- )

всегда будет на 1 больше, чем здесь:

{
    // ...and so on
}

Так что, если общая длина равна 5,у вас будет правильный индекс 4 внутри блока.

К концу, когда i равен 1 в оценке, он будет 0 в блоке, указывая на последнюю итерацию, который получает элемент по первому индексу.

При следующем проходе будет оцениваться i при 0, а код в блоке не будет выполнен.

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