Javascript Jquery负值

Javascript Jquery负值,javascript,jquery,Javascript,Jquery,我现在对jquery有点问题。我有一个导航代码(如按向上箭头和向下箭头可更改URL中的$\u GET变量)。它在正数中运行良好,但当我尝试通过-1时,它会取消变量设置并导致页面重置。 下面是讨论中的Jquery函数 function arrowbuttons() { $(document).keydown(function(e){ var full_url = document.URL; // Get current url var split = location.sea

我现在对jquery有点问题。我有一个导航代码(如按向上箭头和向下箭头可更改URL中的$\u 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,取决于受影响的变量)

这里出现了几个问题:

第一:
replace
接受两个参数。它查找第一个字符串并将其替换为第二个字符串。您的呼叫不会替换任何内容,因为它在您的
位置中找不到字符串
“?,&”
。搜索
字符串。因此,在替换之后,拆分将是
X=1&Y=0&Z=0
(例如)。 第二:您正在硬编码字符串中期望值的确切位置。如果任何值为2位或负数,则该值无效,因为这些值不再位于拆分[7]和拆分[3]位置。因为字符串现在是
X=-1&Y=10&Z=0
(例如)

这是关于在javascript中获取查询参数的一个很好的讨论, 但我通常只是让php在javascript中为我设置变量

添加小提琴,供您弹奏:


听起来,当数字为2个或更多字符时,您会遇到问题,这可能与开头的拆分代码有关?啊。。。我没想到。。。但是,为什么要等到数字是11或-2呢?。。。我想这可能与处理代码的php有关。。。。除了分开还有其他选择吗?嗯,这很奇怪,听起来有点离谱。可能的罪魁祸首是执行替换后的字符串偏移量(看起来也是错误的?)。我会
console.log
x
y
在每次计算它们之后,我打赌你会发现问题所在then@mattedgod也许是个好主意。我即将从编码中休息一个小时,但当我回来时,我会这样做,或者按照芭芭拉·莱尔德下面说的做。。。尽管我对她的建议进行了修改,但我显然还没有达到Java/Jquery的经验水平。
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;