我是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)@
提前完成。
答案 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()
应该做什么,不过
啊,对于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"
这些功能应该有效:
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()?
我可以从你上一篇评论中得出的结论是,你想做这样的事情:
// 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
的结果的原因。 -1
,indexOf
的“未找到”值返回false,其他所有结果都返回true。
答案 1 :(得分:0)
答案 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来执行此操作:
我认为这些触发器是最好的选择吗?
用.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!救了我很多时间。