0

私は今jqueryのビットに問題があります。ナビゲーション コードを取得しました (たとえば、上矢印と下矢印を押すと、URL の $_GET 変数が変更されます)。正の数では問題なく動作していますが、-1 を超えようとすると、変数の設定が解除され、ページがリセットされます。以下は、問題の Jquery 関数です。

function arrowbuttons()
{
  $(document).keydown(function(e){
    var full_url = document.URL; // Get current url

    var split = location.search.replace('?, &');
    var y = split[7];
    var x = split[3];
    var down = +split[7]-1;
    var up = +split[7]+1;
    var left = +split[3]+1;
    var right = +split[3]-1;
    if (e.keyCode == 37) { 
       window.location = 'index.php?X='+left+'&Y='+y+'&Z=0'; 
       return false;
    }
    if(e.keyCode == 38) {
        window.location = 'index.php?X='+x+'&Y='+up+'&Z=0'; 
    return false;
    }
    if(e.keyCode == 39) {
        window.location = 'index.php?X='+right+'&Y='+y+'&Z=0'; 
    return false;}
    if(e.keyCode == 40) { 
    window.location = 'index.php?X='+x+'&Y='+down+'&Z=0'; 
    return false;}
  });   
}

影響を受ける URL 変数 (X または Y) のいずれかが -1 を下回ろうとしている場合、前述のように、php リダイレクト コードによってすべてが先頭 (X=0&Y=0&Z=0) にリダイレクトされます。これは厳密には Jquery の問題です。サイトにハードコーディングしたリンクは -16 まで下げることができるからです。さらに、どの方向でも +10 を超えることができないことに気付きました。+10 を超えると、(影響を受けた変数に応じて X=2 または Y=2) にリセットされます。

4

1 に答える 1

0

ここでいくつかの問題が発生しています。

1 つ目: replace2 つのパラメーターを取ります。最初の文字列を探して、2 番目の文字列に置き換えます。"?,&"文字列に文字列が見つからないため、呼び出しは何も置き換えませんlocation.search。したがって、分割はX=1&Y=0&Z=0(たとえば)置換後に行われます。2 番目: 値を期待している文字列内の正確な位置をハードコーディングしています。値のいずれかが 2 桁または負の数である場合、値が分割 [7] と分割 [3] にないため、機能しません。文字列は現在X=-1&Y=10&Z=0(たとえば)

これは、JavaScript でクエリ パラメータを取得するための良い議論です。 JavaScript でクエリ文字列の値を取得するにはどうすればよいですか? 、しかし、私は通常、phpにjavascriptの変数を設定させるだけです。

あなたが遊ぶためのフィドルの追加:http://jsfiddle.net/bhlaird/M3Ub7/

function getParameterByName(name,location_search) {
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
        results = regex.exec(location_search);
    return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
var location_search = '?X=-1&Y=10&Z=0'  // replace this string with location.search
var y = getParameterByName('X',location_search);
var x = getParameterByName('Y',location_search);
var down = +y - 1;
var up = +y + 1;
var left = +x + 1;
var right = +x - 1;
于 2013-10-16T23:19:09.863 に答える