链接点击上的Javascript代码只运行一次,我希望每次点击链接时都能运行它
我已经设计了一个模板,我正在给用户提供选项,以改变div的样式,他们有5个不同的选项可供选择,每个样式都与每个类名相关联,因此当用户单击链接时,它将改变div样式。因此,我用javascript代码更改了div的类名:链接点击上的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
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]时,您正在删除查询元素上的所有类
sodocument.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]
}