Lorsque j'utilise onChange(), il ne se déclenche que lorsque l'utilisateur modifie quelque chose dans un champ de saisie. Je veux qu'il se déclenche même lorsque JavaScript modifie quelque chose dans un champ de saisie. Comment puis-je réaliser cela ?
Réponses
Trop de publicités?Vous devez ajouter EventListener() method
Mise à jour :
Ainsi, l'utilisateur https://www.webdeveloper.com/u/Sempervivum m'a aidé et a trouvé ce script originalement posté par Shawn Regan ici : détecter un changement de valeur dans une balise d'entrée avec vanilla javascript et MutationObserver qui fait exactement ce que je recherchais. Vous pouvez trouver une démo fonctionnelle ici : https://jsfiddle.net/zyx54/hdn4txry/ Ce script ici :
let registered = [];
let setDetectChangeHandler = function(field) {
if (!registered.includes(field)) {
let superProps = Object.getPrototypeOf(field);
let superSet = Object.getOwnPropertyDescriptor(superProps, "value").set;
let superGet = Object.getOwnPropertyDescriptor(superProps, "value").get;
let newProps = {
get: function() {
return superGet.apply(this, arguments);
},
set: function (t) {
let _this = this;
setTimeout( function() { _this.dispatchEvent(new Event("change")); }, 50);
return superSet.apply(this, arguments);
}
};
Object.defineProperty(field, "value", newProps);
registered.push(field);
}
}
Cette façon d'ajouter l'eventlistner à l'entrée.
var sampleFunction = function(values){
document.getElementById("sample").value = "New text";
}
var input = document.getElementById("sample");
input.addEventListener('change', (event) => {
console.log("afafaf");
});
<div>
<input type="text" id="sample" onchange="sampleFunction(this.value)"/>
</div>
<span id="changetext" ></span>
Ceci devrait aider. https://www.w3schools.com/jsref/event_onchange.asp Si vous avez des besoins plus spécifiques, partagez-les avec nous.