0

我对 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 to ?showpastdate,当 at ?showpastdatestay 被选中时,我可以使用 php $_GETon ?showpastdate。这有效(当我使用静态完整网址时)。但是比...

我该如何修改此代码,以便复选框在?showpastdate再次单击之前保持选中状态,而不是 url 回到原始 .php 状态或其他 GET var?

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

提前谢谢。

4

4 回答 4

1

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

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

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

这部分:window.location.href.indexOf("?showpastdate")搜索href for
"?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 开始计数。

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

于 2012-11-19T14:13:43.433 回答
0

URL 更改事件 - JavaScript

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

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

于 2012-11-19T14:12:36.600 回答
0

我再解释一下。

我有一个 JQuery 数据表,通过 CSS 我有不同的<tr classes>. 根据存储在数据库中的信息,它们<tr>获得不同的类,因此数据表中的颜色也不同。

现在<tr class>我想给用户隐藏/显示的选项。我正在考虑使用复选框来执行此操作,并且 javascript 会在选中时解析一个 url,并在再次取消选中时将其删除。此 URL 可用于 php 运行不同的查询,if $_GET['parsedurl']: query 显示所有表,elseif $_GET['empty']: query 不显示该 1 信息。

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

所以我现在考虑将 javascript 的解析保留在 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 做,但我真的不喜欢这个复选框的提交按钮。只需检查并执行。

于 2012-11-20T08:33:59.393 回答
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!节省了我很多时间。

于 2012-11-20T09:24:44.763 回答