编辑:这是代码的JSFiddle版本,它更简单,可以更简洁地说明问题:
https://jsfiddle.net/Lfo463d9/2/
我有一堆表单元素,这些表单元素在更新后会更改列表中下一个元素的选项。我的工作很好。但是,现在我尝试获取它,以便如果更改了根元素,那么它将检查下一个元素,以查看它是否是新列表的一部分,如果不是,则将其设为空白,然后触发下一个元素的change事件(以便依次将下一个元素留空,依此类推)。变更事件似乎并未触发。
控制台上没有任何错误。
这是因为我试图从变更事件中引发变更事件吗?是否有某种阻碍?
(或者我只是在做一些愚蠢的事情-我大约一周前才开始使用javascript)
我也尝试在javascript中的元素上调用change()函数。
function addChainOptions(anelementID, nextelementID, listToChangeID, firstToSecond, secondFromFirst)
{ var anelement = document.getElementById(anelementID);
anelement.addEventListener("change", function() {
var nextelement = document.getElementById(nextelementID);
var listToChange = document.getElementById(listToChangeID);
console.log(this.id + "has changed");
if(this.value.length == 0)
{
nextelement.value = "";
$("#" + nextelementID).change();
}
nextelement.disabled = true;
google.script.run.withSuccessHandler(function(value) {
htmlOptions = value.map(function(r){return '<option value = "' + r[0] + '">';}).join(" ")
listToChange.innerHTML = htmlOptions;
if(value.length == 1) {
nextelement.value = value[0];
nextelement.change();
}
if(value.includes(nextelement.value) == false && nextelement.value.length > 0)
{
nextelement.value = "";
console.log(nextelement.id + "set to blank - triggering change")
$("#" + nextelementID).change();
}
nextelement.removeAttribute("disabled");
}).subListLookUp(firstToSecond, secondFromFirst, this.value);
});
};
addChainOptions("productTypesInput01", "productsInput01", "productsList01", "ProductTypeMulti", "Products");
addChainOptions("brandsInput01", "productTypesInput01", "productTypesList01", "BrandToProductType", "ProductTypeFromBrand");
addChainOptions("category", "brandsInput01", "brandsList01", "CategoryToBrand", "BrandFromCategory");
目前,它正在将下一个设置为空白,并尝试触发更改,但是什么也没有发生。
答案 0 :(得分:1)
您应该尝试监听“ input”事件而不是“ change”。
const firstinput = document.getElementById("input1");
const secondinput = document.getElementById("input2");
const thirdinput = document.getElementById("input3");
function dispatchEvent(target, eventType) {
var event = new Event( eventType, {
bubbles: true,
cancelable: true,
});
target.dispatchEvent(event);
}
firstinput.addEventListener("input", function() {
secondinput.value = 2;
dispatchEvent(secondinput,"input");
});
secondinput.addEventListener("input", function() {
thirdinput.value = 3;
//dispatchEvent(thirdinput,"input");
});
<input id="input1">
<input id="input2">
<input id="input3">