为什么在执行JavaScript函数后追加查询字符串参数?

为什么在执行JavaScript函数后追加查询字符串参数?,javascript,php,query-string,Javascript,Php,Query String,但是现在,只要我单击任何,背景颜色就会执行一秒钟,任何返回到默认白色背景的操作都会执行,并且查询字符串只会在函数执行后追加 请解释发生这种情况的原因,而不仅仅是解决方案。如果通过更改查询参数来更改位置。href,则会使浏览器重新加载页面,因为这表示一个新位置。为了防止出现这种情况,您需要使用#而不是?作为分隔符来更改散列location.href 如果要重新加载页面,则需要在页面加载后实际设置背景色,此时您正在附加单击处理程序,该处理程序调用setBackground(),然后重新加载页面 &l

但是现在,只要我单击任何
,背景颜色就会执行一秒钟,任何返回到默认白色背景的操作都会执行,并且查询字符串只会在函数执行后追加


请解释发生这种情况的原因,而不仅仅是解决方案。

如果通过更改查询参数来更改
位置。href
,则会使浏览器重新加载页面,因为这表示一个新位置。为了防止出现这种情况,您需要使用
#
而不是
作为分隔符来更改散列
location.href

如果要重新加载页面,则需要在页面加载后实际设置背景色,此时您正在附加单击处理程序,该处理程序调用
setBackground()
,然后重新加载页面

<script>
    var c_selected;
    window.onload = function () {

        document.getElementById("black").addEventListener("click", function () {
            setBackground("black");

        });
        document.getElementById("orange").addEventListener("click", function () {
            setBackground("orange");
        });
        document.getElementById("brown").addEventListener("click", function () {

            setBackground("brown");
        });

    };

    function setBackground(scolor) {
        location.href = (location.href.split("?").length > 1) ? location.href.split("?")[0] + "?color=" + scolor : "?color=" + scolor;
        document.body.style.backgroundColor = scolor
        document.getElementById(scolor).style.border = "thick solid white";
        if (c_selected) {
            document.getElementById(c_selected).style.border = "none";
        }
        document.getElementById("title").style.color = "white";
        <?php $_SESSION['THEME_COLOR'] = isset($_GET['color']) ? $_GET['color'] : "white"; ?>
        c_selected = scolor;
    }


</script>
window.onload=function(){
/*添加单击处理程序*/
document.body.style.backgroundColor=“”;
}

无需更改
setBackground()
中的背景色,因为该函数使浏览器重新加载页面,因此您不会看到很长的结果。

如果通过更改查询参数更改
位置。href
,则会使浏览器重新加载页面,因为这表示一个新位置。为了防止出现这种情况,您需要使用
#
而不是
作为分隔符来更改散列
location.href

如果要重新加载页面,则需要在页面加载后实际设置背景色,此时您正在附加单击处理程序,该处理程序调用
setBackground()
,然后重新加载页面

<script>
    var c_selected;
    window.onload = function () {

        document.getElementById("black").addEventListener("click", function () {
            setBackground("black");

        });
        document.getElementById("orange").addEventListener("click", function () {
            setBackground("orange");
        });
        document.getElementById("brown").addEventListener("click", function () {

            setBackground("brown");
        });

    };

    function setBackground(scolor) {
        location.href = (location.href.split("?").length > 1) ? location.href.split("?")[0] + "?color=" + scolor : "?color=" + scolor;
        document.body.style.backgroundColor = scolor
        document.getElementById(scolor).style.border = "thick solid white";
        if (c_selected) {
            document.getElementById(c_selected).style.border = "none";
        }
        document.getElementById("title").style.color = "white";
        <?php $_SESSION['THEME_COLOR'] = isset($_GET['color']) ? $_GET['color'] : "white"; ?>
        c_selected = scolor;
    }


</script>
window.onload=function(){
/*添加单击处理程序*/
document.body.style.backgroundColor=“”;
}

无需更改
setBackground()
中的背景色,因为该函数使浏览器重新加载页面,因此您不会看到很长时间的结果。

当您更改
location.href
时,您正在重新加载页面,但随着脚本继续运行,您可以在更改颜色属性时看到

看一看,我只对您要更改的
location.href
行进行了注释

如果要将颜色用作查询字符串参数,则应使用哈希参数

var c_选择;
window.onload=函数(){
document.getElementById(“黑色”).addEventListener(“单击”,函数)(){
挫折背景(“黑色”);
});
document.getElementById(“橙色”).addEventListener(“单击”,函数)(){
退步地(“橙色”);
});
document.getElementById(“brown”).addEventListener(“单击”,函数)(){
退步地(“棕色”);
});
};
功能设置背景(scolor){
/*location.href=(location.href.split(“?”).length>1)?location.href.split(“?”[0]+”?color=“+scolor:”?color=“+scolor*/
document.body.style.backgroundColor=scolor;
document.getElementById(scolor.style.border=“厚实白色”;
返回;
如果(已选择c_){
document.getElementById(c_选中)。style.border=“无”;
}
c_selected=scolor;
}

选择一个背景主题
黑色
橙色
棕色的

更改
位置时。href
会重新加载页面,但随着脚本继续运行,您可以看到更改颜色属性的时间

看一看,我只对您要更改的
location.href
行进行了注释

如果要将颜色用作查询字符串参数,则应使用哈希参数

var c_选择;
window.onload=函数(){
document.getElementById(“黑色”).addEventListener(“单击”,函数)(){
挫折背景(“黑色”);
});
document.getElementById(“橙色”).addEventListener(“单击”,函数)(){
退步地(“橙色”);
});
document.getElementById(“brown”).addEventListener(“单击”,函数)(){
退步地(“棕色”);
});
};
功能设置背景(scolor){
/*location.href=(location.href.split(“?”).length>1)?location.href.split(“?”[0]+”?color=“+scolor:”?color=“+scolor*/
document.body.style.backgroundColor=scolor;
document.getElementById(scolor.style.border=“厚实白色”;
返回;
如果(已选择c_){
document.getElementById(c_选中)。style.border=“无”;
}
c_selected=scolor;
}

选择一个背景主题
黑色
橙色
棕色的

但是如何在php中检索#querystring参数呢?我认为您是在混入概念,如果您想在php中保存var color,那么无需重新加载整个页面即可完成此操作。最好的方法是对将保存它的外部页面进行ajax调用。因此,用户体验在完全不刷新的情况下会更好。但是,与如何在php中检索#querystring参数相比,我认为您是在混合概念,如果您想在php中保存var color,则无需重新加载整个页面即可完成此操作。最好的方法是对将保存它的外部页面进行ajax调用。因此,用户体验会更好,根本不需要刷新。
window.onload = function () { 
 /*add click handlers*/ 
 document.body.style.backgroundColor = "<?php $_SESSION['THEME_COLOR'] = isset($_GET['color']) ? $_GET['color'] : "white"; ?>";
}