2013-10-16 38 views
0

我現在有點jquery的問題。我有一個導航代碼(EG按下向上箭頭和向下箭頭來改變URL中的$ _GET變量)。它在正數上工作正常,但是當我嘗試通過-1時,它會取消設置變量並導致頁面重置。 下面是有問題的Jquery函數。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,就像我以前說過,一切都被重定向回到起點(X = 0 & Y = 0 & Z = 0)通過我的PHP重定向代碼。這完全是一個Jquery問題,因爲我硬編碼到我的網站的鏈接完全有能力低至-16。此外,我注意到,在任何方向上我都不能超過+10。當我去上面+10我重置我(X = 2或Y = 2,這取決於變量已經影響)

+0

聽起來像是你有一個問題,當數爲2個或更多字符,這可能有些事情要與在開始分裂代碼? –

+0

啊......我沒有想到......雖然,爲什麼它會等到數字是11或-2?......我想這可能與處理代碼的php有關。 .. 除拆分外還有其他選擇嗎? –

+0

嗯,這是奇怪的,聽起來是一個一個的。可能的罪魁禍首是你做替換後的字符串偏移量(這看起來不對)?每次計算它們後,我會'console.log'' x'和'y',我打賭你會發現哪裏出了問題 –

回答

0

你有一對夫婦的問題發生在這裏:

1:replace需要2參數。它查找第一個字符串並用第二個字符串替換它。你的電話將不會取代任何東西,因爲它在location.search字符串中找不到字符串"?,&"。因此,在您更換之後,拆分將爲X=1&Y=0&Z=0(例如)。 第二:您正在編碼字符串中您期待值的確切位置。如果任何值爲2位或負數,則它不起作用,因爲這些值不再位於split [7]和split [3]處。由於該字符串現在是X=-1&Y=10&Z=0(例如)

這是做好查詢參數在JavaScript How can I get query string values in 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;