2011-01-02 9 views
0

がhi私はscript.jsは私にJSとjQueryの問題

<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--;) {

答えて

1

変更これまでのループのだと思う:

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

Javascript配列のインデックスは0から始まり、配列のサイズで終わる-1(配列は、5つの要素を持っているのであれば、最初のものは0のインデックスを持ち、最後のものは4)のインデックスを持ちます。

元のループは配列のサイズから始まり、直ちにデクリメントされます(最後の要素がアクセスされるため)。ループは、変数が0に減少するまで続き、その時点でループが存在し、の最初の要素は使用されていません。

javascriptでのループオーバーについては、this pageを参照してください。


さらに、この条件if (aimt!=chars.length-1 && aimt != 0)は、最後の要素を特に除外します。 && aimt != 0を削除します。

+0

これはうまくいっていますが、まだまだこのdivn divを作っていません。 – Sonny

+1

@Sonny - if(aimt!= chars.length-1 && aimt!= 0) 'とは何ですか?私はこの状態があなたの問題だと言います。 – Oded

+0

それはそれが動作する原因です:P – Sonny

0

逆ループを行っているので、代わりに逆のwhileを使用します。

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

これは、あなたのループの本体内部iの適切な値を与える、まだ適切な時間にループを終了します、速くなります。

この理由は、私がポストデクリメントする演算子をしばらく使用したことによるものです。

{ 
    // ...and so on 
} 

ので、全長が5であれば、あなたは適切なインデックス4があるでしょう:

while(i--) 

常にそれがここにあるよりも1大きくなります。これは、ここでiの価値があることを意味しますブロックの内側にある。

評価の際にi1の場合、ブロック内では0となり、最後の反復を示し、最初のインデックスで項目を取得します。

i0と評価し、ブロック内のコードは実行されません。

+0

が原因でコード全体を書き込めますか? – Sonny

+0

@Sonny:Replace: 'var lol = chars.length; for(var i = lol; i--;){'これでは代わりに' var i = chars.length; while(i--){'他のすべては同じです。 – user113716