我现在遇到一些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,具体取决于哪个变量受到影响)
答案 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;