链接点击上的Javascript代码只运行一次,我希望每次点击链接时都能运行它

链接点击上的Javascript代码只运行一次,我希望每次点击链接时都能运行它,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我已经设计了一个模板,我正在给用户提供选项,以改变div的样式,他们有5个不同的选项可供选择,每个样式都与每个类名相关联,因此当用户单击链接时,它将改变div样式。因此,我用javascript代码更改了div的类名: function changeClass(value){ style = [ 'view view-first', 'view view-second', 'view view-third', 'view view-fourth', 'view view-fif

我已经设计了一个模板,我正在给用户提供选项,以改变div的样式,他们有5个不同的选项可供选择,每个样式都与每个类名相关联,因此当用户单击链接时,它将改变div样式。因此,我用javascript代码更改了div的类名:

function changeClass(value){

        style = [ 'view view-first', 'view view-second', 'view view-third', 'view view-fourth', 'view view-fifth' ];
         var elements = document.getElementsByClassName("test");
         for(var i = elements.length - 1; i >= 0; i--)
        {

            // PERFORM STUFF ON THE ELEMENT
            elements[i].className = style[value];

            // elements[i] no longer exists past this point, in most browsers
        }   
        }
首先,我收集了要更改的div的类名,并将其存储在数组中

第二,我用新的类名创建了一个新数组

第三,我运行了一个循环,并为div分配了新的类名

第四,我在链接上合并了onClick changeClass(0)changeClass(1)etc事件,并运行了该函数

下面的代码是确定的,当我第一次单击该链接时,当我单击另一个带有onClick事件的链接时,样式dosent将更改。特别是,只有在我第一次单击页面中的任何链接时,才会发生类名更改


我的目标是根据相关链接更改div的样式。

它只在第一次起作用,因为您正在使用
test
类搜索元素。然后用函数中的类替换该类。因此,在第一次运行之后,没有使用
test
类的元素,随后在接下来的运行中找不到任何内容

解决方法(保留
测试
类,但仅用于选择,不用于样式)

var style=[“视图第一”、“视图第二”、“视图第三”、“视图第四”、“视图第五”];
函数更改类(值){
var targetClass=“测试”,
元素=document.getElementsByClassName(targetClass);
对于(var i=elements.length-1;i>=0;i--){
//对元素执行一些操作
元素[i].className=targetClass+''+style[value];
//在大多数浏览器中,元素[i]在此点之后不再存在
}
}
。先查看{颜色:红色;}
.查看第二个{颜色:蓝色;}
.查看第三个{颜色:绿色;}
.查看第四个{颜色:黄色;}
.查看第五个{颜色:橙色;}
测试#1
无关文本

测试#2 无关文本

无关文本

测试#3 测试#4 测试#5 无关文本

无关文本

无关文本

测试#6 测试#7 第一(红色) 第二(蓝色) 第三(绿色) 第四(黄色)
第五个(橙色)
当执行
元素[i].className=style[value]时,您正在删除查询元素上的所有类
so
document.getElementsByClassName(“test”)
在后续调用中不会匹配任何内容


现在还不清楚您的意图是什么,但如果您只是想添加到类列表中,请替换
元素[i].className=style[value]带有
元素[i]。类名+=style[value]

在最初调用changeClass之后,将不再有任何“test”的类名

正在将类名“test”更改为函数调用中指定的任何样式索引

因此,它无法在初始调用之后找到类名“test”来执行任何操作。您必须刷新页面或调用其他函数才能将类名更改回“test”

您可能需要声明“test1”、“test2”、“test3”等的ID

然后可以调用(如果元素是输入):

var inputs=document.getElementsByTagName(“输入”);
对于(变量i=0;i=0)
输入[i].className=style[value]
}

您第一次更改类,第二次单击时,它们已经设置好了,您在等待什么?基本上,有5个链接,所有5个链接都与5个不同的类名关联,这些类名会更改div的样式,因此每个链接都有一个单击事件,如changeClass(0)changeClass(1)etcI设计了一个模板,我给用户提供选项,改变div的样式,他们有5个不同的选项来选择表单,每个样式都与每个类名相关联,所以当用户点击一个链接时,它会改变div样式。。这是我的意图。另外,如果你正在使用(因为你已经标记了这个问题),你可以大大简化代码。明白了,我落后的地方,先生,但是你的解决方案有一个问题,每次单击不同的链接时,它都会在标记中附加新的类名,如下所示。。它应该被替换。我已经设计了一个模板,我正在给用户提供选项,以改变div的样式,他们有5个不同的选项来选择表单,每个样式都与每个类名相关联,所以当用户点击一个链接时,它将改变div样式。。这就是我的意图。因此,您需要将模板类从元素的
class
属性中解析出来,这样您就可以保留任何其他类。最简单的方法是使用,但要小心浏览器的支持。浏览器兼容性将是第一要务。我正在尝试使用你的建议,只是需要一个建议,如何,使用>测试<类在我所有存储的类名,所以如果点击一个链接,它将保留测试类。
 elements[i].className = style[value];
var inputs = document.getElementsByTagName("input");

for (var i = 0; i < inputs.length; i++) {
  if(inputs[i].id.indexOf("test") >= 0)
    inputs[i].className = style[value]
}