Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么可以';我不能切换我的样式表吗?_Javascript_Html_Css_Web - Fatal编程技术网

Javascript 为什么可以';我不能切换我的样式表吗?

Javascript 为什么可以';我不能切换我的样式表吗?,javascript,html,css,web,Javascript,Html,Css,Web,我试图让一些html和一个外部js文件协同工作,以允许用户通过点击我主页底部的按钮来切换样式表,但由于某些原因,它无法工作 js文件: function setActiveStyleSheet( title ) { var i, a, main; for(i=0; (a = document.getElementsByTagName("link")); i++) { if(a.getAttribute("rel").indexOf("style") != -1

我试图让一些html和一个外部js文件协同工作,以允许用户通过点击我主页底部的按钮来切换样式表,但由于某些原因,它无法工作

js文件:

function setActiveStyleSheet( title ) {
    var i, a, main;
    for(i=0; (a = document.getElementsByTagName("link")); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1
            && a.getAttribute("title")) {
        a.disabled = true;
        if(a.getAttribute("title") == title) a.disabled = false;
        }
    }
}
以及html:

<head>
    <script 
        type="text/javascript" src="./styleswitcher.js">
    </script>
    <link rel="stylesheet" type="text/css"
        href="style1.css" title="black">
    <link rel="alternate stylesheet" type="text/css"
        href="style2.css" title="photo" />
</head>
<body>
.
.
.
<footer>
<form>
        <ul class="styleswitcher">
            <li><input type="submit"
                    onclick="setActiveStyleSheet(black);"
                    value="Style 1" id="stylebutton" />
            </li>
            <li><input type="submit"
                    onclick="setActiveStyleSheet(photo);"
                    value="Style 2" id="stylebutton" />
            </li>
        </ul>
</form>

.
.
.
我还试图设置在cookie中保存样式,但我已经了解到,并非所有浏览器都接受本地文件的cookie(我还没有域空间),所以我将等待稍后执行

谢谢


[编辑]很抱歉,我脑子里确实有这些链接,不知道为什么我没有复制它们-现已修复;)。仍然不起作用。

我认为您需要完成添加或删除DOM中的链接元素。。。不仅仅是禁用它们:

几个问题:

1) HTML没有声明默认样式表和备选样式表。 您的JS代码正在链接标记中循环,但代码中没有链接标记

2) 除非black和photo是变量,否则需要用引号将它们括起来,比如
setActiveStyleSheet('photo')
。确保链接的标题属性与照片或黑色匹配


您的代码源:。阅读它,它很有用。

你在
for
循环中使用了多么奇怪的构造。你能解释一下你想要实现什么吗?你的错误控制台说什么?我敢打赌,这里需要一些单引号,因为您传递的是一个字符串:onclick=“setActiveStyleSheet('photo');”除了上面的注释之外,看起来您除了禁用按钮之外什么都不做?这是为了搜索以开头的所有声明的样式表,避免在多个id属性中使用相同的值。这些值应该是唯一的,如果您想在按钮之间循环,请改用class属性。某些浏览器(Mozilla套件)列出了所有可用的备用样式表。此外,它们可能会缓存它们以加速页面重新呈现。删除链接元素将阻止所有这一切。最后,您要确保只删除“备用样式表”链接元素,因为链接元素可以用于其他目的(打印、其他设备等)。这仍然是浏览器支持的吗?这篇文章是从2001年开始的,从那时起,网络已经不再让用户控制网站的外观。很抱歉,没有像我应该的那样复制链接-已修复,但仍然不起作用。@Cormorant我没有注意到你的按钮是“提交”按钮。尝试改用
。“提交”按钮可能会使您离开页面(与没有“操作”属性的页面相同),并阻止JavaScript运行。@ehdv:这是HTML 4,HTML 5仍然不是一个完整/推荐的规范(请参阅:)。所以我相信这仍然是相关的。@Cormorant好的,我想我找到了问题所在。for循环是错误的。请参见此处的重复答案: