javascript - Vanilla JS addEventListener 在选择上的更改仅触发一次
问题描述
我正在使用一个电子商务系统,我无法访问 HTML 代码或任何东西,但我可以添加自定义 JS 代码来更改一些东西和 CSS。我需要编辑适合 Doba dodania 文本的运输信息文本。我的问题是该事件仅触发一次,而不是在每个选择更改事件上触发。有人可以帮我为什么它只发射一次吗?也需要添加 SetTimeOut。请在此处查看页面和控制台日志: https ://www.privlacuj.sk/Hacik-Offset-Light-Class-AT-21-cena-za-1ks-d2336_1013278452.htm
我的代码是:
<script type="text/javascript">
function change_doba_dodania() {
var c757_counter = document.querySelectorAll(".c757").length;
var variant = document.querySelectorAll(".c755.variant").length;
var out_of_stock = document.querySelectorAll(".c757.out-of-stock").length;
console.log(c757_counter);
console.log(variant);
console.log(out_of_stock);
if (out_of_stock > 0) {
console.log("Nincs raktaron");
}
if ( ( c757_counter >= 2 ) && ( out_of_stock == 0 ) ){
var dd_text = document.getElementsByClassName("c757")[1].innerHTML;
console.log(dd_text);
var dd_text_array = dd_text.split(" ");
var dd_final = dd_text_array.filter(String);
console.log(dd_final);
if (dd_final[2] == "zajtra") {
document.getElementsByClassName("c757")[1].innerHTML = dd_final[6] + " " + dd_final[7] + " " + dd_final[8] + " " + dd_final[9] + " " + dd_final[10] + " a Vaša zásielka bude expedovaná už " + dd_final[2];
} else {
document.getElementsByClassName("c757")[1].innerHTML = dd_final[6] + " " + dd_final[7] + " " + dd_final[8] + " - " + dd_final[9] + " a Vaša zásielka bude expedovaná už " + dd_final[2];
}
}
}
window.addEventListener('DOMContentLoaded', (event) => {
change_doba_dodania();
});
var variant = document.querySelectorAll(".c755.variant").length;
if (variant > 0){
document.querySelector('.c757 select').addEventListener('change', function()
{setTimeout(change_doba_dodania, 1500)});
document.querySelector('.c757 select').addEventListener('change',() =>
setTimeout(console.log, 1000, "Changed")
)
}
解决方案
如果我有你的问题,你的问题是querySelector
。
querySelector
只选择具有给定类名的第一个元素。如果要选择具有给定类名的所有元素,则应使用querySelectorAll
.
document.querySelectorAll(".c757 select").forEach(select => {
select.addEventListener(...)
})
推荐阅读
- rest - 使用 REST API 在 SharePoint 中创建项目 - 人员选取器空值
- ios - 使用 Expo 创建的生产构建问题
- rstudio - 大气电导方程
- ruby-on-rails - rails form:如果已经有这个孩子,不要在表单中显示孩子
- postgresql - postgres:将 filter() 与 percentile_cont() 结合使用
- javascript - 我可以通过要求直接从动作创建者内部访问 redux 调度吗?
- c# - Asp.Net Identity 从一个应用程序池标识生成密码重置令牌并在另一个应用程序池标识上进行验证
- java - 从 snapshot.getKey() 获取不同的字符串;和 mAuth.getUid(); 没有 .push();
- c - 不是二次方程的工作根
- python - 在python中重新运行代码时如何将变量设置为一次