javascript如果选中复选框,href到?page2,如果在?page2:保持cb检查,当未选中时,href到?page1

时间:2012-11-19 14:02:49

标签: php javascript get href window.location

我是javascript的新手,我不知道如何让这个工作...我修改了一点代码,但请注意第6行是没有意义的。这是这篇文章的主要原因。

<script>
function checkReloading() {
    if (window.location.href.split=="?showpastdate") {
        document.getElementById("showpastdate").checked=true;
    } else {
        document.getElementById("showpastdate").checked=false;
    }
}

function toggleAutoRefresh(cb) {
    if (cb.checked) {
        window.location.replace("?showpastdate");
    } else {
        window.location.replace("");
    }
}
window.onload=checkReloading;
</script>

好的,我觉得这很可读。

首先,window.location.href.split不起作用,因为我必须提供完整路径。但是我怎样才能使这个动态,所以它可以在更多的网站上使用?我看到的每个地方:window.location.protocol + "//" + window.location.host + "/" + window.location.pathname;但我如何为动态网页实现这一行代码?有人可以举个例子吗?

我想用这段代码实现的目的是:
当选中showpastdate时,href为?showpastdate,当?showpastdate保持检查状态时,我可以在$_GET上使用php ?showpastdate。这工作(当我使用静态完整网址时)。但比......

我如何修改此代码,以便在?showpastdate处仍然选中复选框,直到再次点击,而不是网址会回到原来的.php状态或其他GET var?

很抱歉要求编写代码,但我敢打赌,在我冲浪8小时的时候,你可以在2分钟内编写这些简单的行。不打算学习javascript,但这对我的程序来说是一个不错的选择,可以切换显示过去日期ON / OFF的项目,比2个复选框更好,1个用于ON,1个用于OFF:x编辑:+提交按钮@( O _o)@

提前完成。

4 个答案:

答案 0 :(得分:1)

.split()是一个可以在字符串对象上执行的函数,可以根据提供的参数将其拆分: "abcdefg|hijklmnop|qrstuvw".split('|')
会产生这样的数组:
["abcdefg","hijklmnop","qrstuvw"]

现在,我猜您已在网址中添加了“?showpastdate”参数,以更改复选框的“已检查”状态。 最简单的方法是:

document.getElementById("showpastdate").checked = (~window.location.href.indexOf("?showpastdate"))

这部分:window.location.href.indexOf("?showpastdate")在href中搜索
"?showpastdate"
如果找到了字符串,它将返回一个索引。如果没有,它将返回-1。 它前面的波浪形是将-1或0(或更高)转换为真/假。

我不太确定toggleAutoRefresh()应该做什么,不过

编辑1

啊,对于toggleAutoRefresh(),只需添加:

if (cb.checked) {
    window.location.href.replace("?showpastdate","");
}

而不是那个if-else块。 .replace()函数以与.split()相同的方式处理字符串。它需要2个参数:要查找什么,以及用什么来替换它。 所以,例如:

var someString = "words and stuff"
var result = someString.replace(" ","_");
//result will be "words_and_stuff"

编辑2

这些功能应该有效:

function checkReloading() {
    document.getElementById("showpastdate").checked = (~window.location.href.indexOf("?showpastdate"))
}

function toggleAutoRefresh(cb) {
    if (cb.checked) {
        window.location.href.replace("?showpastdate","");
    }else{
        window.location.href += "?showpastdate";
    }
}

你从哪里调用toggleAutoRefresh()?

编辑3

我可以从你上一篇评论中得出的结论是,你想做这样的事情:

// If a checkbox named "cb" is checked, and the url contains "?showpastedate"
if ((cb.checked) && ~window.location.href.indexOf("?showpastdate")) { 
    //Uncheck the checkbox and remove the "?showpastedate" from the url
    document.getElementById("showpastdate").checked = false;
    window.location.href.replace("?showpastdate","");
} else {
    // Else, check the checkbox and add the "?showpastedate" to the url
    document.getElementById("showpastdate").checked = true;
    window.location.href += "?showpastdate";
}

请注意indexOf前面使用“〜” 如果string.indexOf("text")在字符串的开头找到"text",就像在"tekstbooks bla bla bla"中那样,它会返回0.第一个索引,从0开始计数。

当将0隐式地转换为布尔值时,此零被解释为false。因此,如果indexOf要在第一个索引处找到结果,它应该(在这种情况下)返回true以指示已找到字符串。这就是我们将Bitwise NOT ~应用于indexOf的结果的原因。 -1indexOf的“未找到”值返回false,其他所有结果都返回true。

答案 1 :(得分:0)

URL Change Event - JavaScript

http://help.dottoro.com/ljgggdjt.php

我认为你也可以使用onchange()javascript事件。

答案 2 :(得分:0)

我会再解释一下。

我有一个JQuery数据表,通过CSS,我有不同的<tr classes>。根据存储在数据库中的信息,这些<tr>会得到一个不同的类,因此数据表中的颜色会不同。

现在有一个<tr class>我想给用户隐藏/显示的选项。我想用一个复选框来做这个,并且javascript会在检查时解析一个url,并在再次取消选中时将其删除。这个URL可用于运行不同的查询,如果$_GET['parsedurl']:查询显示所有表,则为$_GET['empty']:查询不显示该信息。

但这是最糟糕的做法。我需要找到一些东西来打开或关闭表类的display: none,因为这是在客户端工作。

所以我现在正在考虑将URL解析为URL,并根据URL,运行.php GET以回显<tr style: display: none>或只是<tr>

因此我需要一些javascript来执行此操作:

  • 如果选中复选框,则重定向到projectlist.php?showpastdate
  • 当URL = projectlist.php?showpastdate时,选中复选框。
  • 当URL = projectlist.php?showpastdate并且取消选中复选框时,重定向到projectlist.php,取消选中该复选框。

我认为这些触发器是最好的选择吗?

用.PHP我会这样做:

if (isset($_GET['showpastdate']))
{
<tr style: display: none>
}
else
{
<tr>
}

也许某人有更好的解决方案?我想听听!

感谢。

修改

我现在的javascript是:

<script>
function toggleAutoRefresh(cb) {
    if (cb.checked) {
        window.location.replace("?showpastdate");
    }
        // If a checkbox named "cb" is checked, and the url contains "?showpastedate"
    if ((cb.checked) && !~window.location.href.indexOf("?showpastdate")) { 
        //Uncheck the checkbox and remove the "?showpastedate" from the url
        document.getElementById("showpastdate").checked = false;
        window.location.href.replace("?showpastdate","");
    } else {
        // Else, check the checkbox and add the "?showpastedate" to the url
        document.getElementById("showpastdate").checked = true;
        window.location.href += "?showpastdate";
    }   
}
</script>

选中该复选框后,它会转到页面projectlist.php?showpastdate并在那里取消选中。再次检查时,它会转到projectlist.php?showpastdate?showpastdate。它应该删除?showpastdate,而不是添加另一个。

这也可以用PHP,但我真的不喜欢这个复选框的提交按钮。只需检查并执行即可。

答案 3 :(得分:0)

好。我懂了。

<script>
function toggleAutoRefresh(cb) {
    if (~window.location.href.indexOf("?hidepastdate") == 0){
        window.location.replace("?hidepastdate");
        document.getElementById("showpastdate").checked == true;
    }
    if (~window.location.href.indexOf("?showpastdate") == 0){
        window.location.replace("?showpastdate");
        document.getElementById("showpastdate").checked == true;
    }
}
</script>

现在每次点击都会切换到URL,PHP会显示CSS显示效果。

感谢您的努力,并指出我正确的方向,Cerbrus!救了我很多时间。