javascript - 如何将 onclick 事件附加到从 vuejs "v-for=" 生成的每个项目以显示或隐藏其内部元素
问题描述
我的Vue数据是
data: function() {
return {
results: {
"items": [
{
"id": "770c257b-7ded-437c-99b5-3b8953b5be3a",
"name": "Gsbssbb",
"price": 9559,
"colour": {
"name": "Blue",
"hex": "FF0000AE"
},
"amountAvailable": 949
},
{
"id": "8ecc6558-0c16-4497-b742-5eb5cb28c572",
"name": "Vsbdbdb",
"price": 6559,
"colour": {
"name": "Purple",
"hex": "FF800080"
},
"amountAvailable": 6595
}
],
}
模板是
<div class="column asoebi-list-item" v-for="result in results.items">
<div id="item-event" class="columns is-mobile">
<div class="column auto has-text-left">
<p class="item-name">{{result.name}}</p>
<p class="item-price" id="item-price"> {{result.price}}</p>
<p class="item-units">{{result.amountAvailable}} Units Remaining · {{result.colour.name}}</p>
</div>
<div class="column is-2">
<button id="number-spinner-up" class="o-button button-bottom" type="button" onclick="this.parentNode.querySelector('[type=number]').stepUp();">
+
</button>
<input id="count-input" type="number" name="number" min="0" max="900" v-model="count">
<button id="number-spinner-down" class="o-button button-top" type="button" onclick="this.parentNode.querySelector('[type=number]').stepDown();">
-
</button>
</div>
</div>
</div>
当我遍历每个数据并显示它们时,如何添加事件以隐藏和取消隐藏带有数字 id“数字微调器”类的 div 以及显示的每个元素上的按钮。
我已经写了这个,但即使我点击其他项目,它也只会影响第一个项目。
let allItems = document.querySelectorAll("#item-event");
for (let i = 0; i <= allItems.length; i++) {
allItems[i].addEventListener("click", () => {
this.toggleSpinner()
});
}
toggleSpinner: function() {
let countInput = document.getElementById("count-input");
countInput.style.visibility = "visible"
let theElementStyle1 = getComputedStyle(document.getElementById("number-spinner-up"));
let theElementStyle2 = getComputedStyle(document.getElementById("number-spinner-down"));
if(theElementStyle1.visibility === "hidden") {
document.getElementById("number-spinner-up").style.visibility = "visible";
}
else {
if(countInput.value === "0") {
countInput.style.visibility = "hidden"
}
document.getElementById("number-spinner-up").style.visibility = "hidden";
}
if(theElementStyle2.visibility === "hidden") {
document.getElementById("number-spinner-down").style.visibility = "visible";
}
else {
if(countInput.value === "0") {
countInput.style.visibility = "hidden"
}
document.getElementById("number-spinner-down").style.visibility = "hidden";
}
},
我刚开始vue..请原谅我的马虎
解决方案
您正在使用 Vue !不要专注于操作 DOM !你没有使用 jQuery !在编码之前阅读 Vue 文档!
推荐阅读
- r - 嗨,问题是否有在 R studio 中做 excel 的 RIGHT() 函数?
- rundeck - Rundeck - 根据输入选项动态运行步骤
- algorithm - 为什么Iterative Deepening Search的空间复杂度是O(bm)?
- gitlab-ci - 无服务器到 AWS - Gitlab CICD
- java - 为什么在尝试使用 SAF 打开文件时会调用 `onSaveInstanceState` 函数?
- mysql - 错误:ER_INVALID_JSON_TEXT:无效的 JSON 文本:“无效值”。在“._data”列的值中的位置 1。在节点 JS
- botframework - 使用 Azure Active Directory v2 的 Microsoft Bot 身份验证
- javascript - 处理数据加载 - Vue
- python - python中的全局常量
- oracle - Kakfa Connect Oracle 源连接器