Jquery负值

时间:2013-10-16 22:53:48

标签: javascript jquery

我现在遇到一些jquery问题。我有一个导航代码(EG按向上箭头和向下箭头改变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,就像我之前所说的那样,所有内容都被重定向回到开头(X = 0& Y = 0& Z = 0) php重定向代码。这严格来说是一个Jquery问题,因为我已经硬编码到我的网站的链接我完全能够低至-16。此外,我注意到我无法在任何方向上超过+10;当我超过+10时,我将我重置为(X = 2或Y = 2,具体取决于哪个变量受到影响)

1 个答案:

答案 0 :(得分:0)

你在这里遇到了几个问题:

1st:replace需要2个参数。它查找第一个字符串并将其替换为第二个字符串。您的呼叫不会替换任何内容,因为它在"?,&"字符串中找不到字符串location.search。更换后,拆分将为X=1&Y=0&Z=0(例如)。 第二:您正在编码字符串中您期望值的确切位置。如果任何值是2位数或负数,则它不起作用,因为这些值不再是拆分[7]和拆分[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;