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

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

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