点击事件只能跟绑定在标签 a 上,点击 a,更改 ul 的属性(用 for 循环给所有的 a 标签 绑定匿名函数,外层循环)
时间: 2024-05-06 15:16:50 浏览: 52
你可以这样实现:
```html
<ul id="myList">
<li><a href="#">选项1</a></li>
<li><a href="#">选项2</a></li>
<li><a href="#">选项3</a></li>
</ul>
```
```javascript
var list = document.getElementById("myList");
var links = list.getElementsByTagName("a");
for (var i = 0; i < links.length; i++) {
(function(index) {
links[index].addEventListener("click", function() {
list.setAttribute("data-selected", index);
});
})(i);
}
```
这个例子中,我们使用了一个匿名函数来绑定每个 a 标签的点击事件。这个匿名函数会在点击时触发,并且会将当前选中的选项的索引值设置为 ul 元素的自定义属性 data-selected 的值。注意,我们使用了一个立即执行函数来将循环变量的值传递给匿名函数,以确保在事件处理程序函数被调用时,它对应的索引值是正确的。
相关问题
vue循环点击事件传参
在Vue中,我们可以使用v-for指令来循环渲染一个元素,并且可以结合@click事件给循环的元素绑定点击事件。在循环点击事件中传递参数,有几种方式可以实现。
第一种方式是使用匿名函数。我们可以在@click事件后面使用匿名函数来传递参数。例如:
```html
<template>
<div>
<ul>
<li v-for="(item, index) in items" :key="index" @click="handleClick(item)">
{{ item.name }}
</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
items: [
{ name: 'item1' },
{ name: 'item2' },
{ name: 'item3' }
]
}
},
methods: {
handleClick(item) {
console.log(item)
}
}
}
</script>
```
在这个例子中,我们通过@click事件后面的匿名函数来传递item参数,点击时会将对应的item对象输出到控制台。
第二种方式是使用bind方法。我们可以使用Function.prototype.bind方法来创建一个绑定了参数的新函数。例如:
```html
<template>
<div>
<ul>
<li v-for="(item, index) in items" :key="index" @click="handleClick.bind(this, item)">
{{ item.name }}
</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
items: [
{ name: 'item1' },
{ name: 'item2' },
{ name: 'item3' }
]
}
},
methods: {
handleClick(item) {
console.log(item)
}
}
}
</script>
```
在这个例子中,我们使用了handleClick.bind(this, item)来创建一个新的函数,并且将this和item作为参数传递进去。
无论是使用匿名函数还是bind方法,我们都可以在点击事件中传递参数,并在方法中获取到参数的值。这样就可以实现在Vue中循环点击事件传递参数的功能。
阅读全文