Existe-t-il un événement dans jQuery ou JavaScript qui s'est déclenché lorsque la balise span
text/html a été modifiée?
Code:
<span class="user-location"> </span>
$('.user-location').change(function () {
//Not working
});
Merci d'avance!
vous pouvez utiliser DOMSubtreeModified
pour suivre les modifications de votre élément span, c'est-à-dire (si le texte de votre élément span change de manière dynamique).
$('.user-location').on('DOMSubtreeModified',function(){
alert('changed')
})
consultez le lien suivant https://jsbin.com/volilewiwi/edit?html,js,output
La réponse courte est pour jQuerychange
- Event NO,
Cet événement est limité aux éléments input, aux zones textarea et à select elements. Pour les cases à cocher, les cases à cocher et les boutons radio, l'événement est déclenché immédiatement lorsque l'utilisateur sélectionne avec la souris, mais pour les autres types d'élément, l'événement est différé jusqu'à l'élément perd le focus. ... voici un lien vers la documentation https://api.jquery.com/change/
Mais avec quelque chose comme la MutationsObserver
voici le lien vers la référence MDN https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver , vous pouvez surveiller les modifications apportées au DOM. Dans votre cas spécifique, la span
en question.
Voici un bref exemple (adapté de MDN Reference)
Dans l'exemple, le changement span
est simulé avec un setTimeout
// select the target node
var target = document.getElementById('user-location');
// create an observer instance
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
console.info("EVENT TRIGGERT " + mutation.target.id);
});
});
// configuration of the observer:
var config = { attributes: true, childList: true, characterData: true };
// pass in the target node, as well as the observer options
observer.observe(target, config);
// simulate the Change of the text value of span
function simulateChange(){
target.innerText = "CHANGE";
}
setTimeout(simulateChange, 2000);
<span id="user-location"></span>
avec jQuery vous pouvez faire ceci:
dans cet exemple, j'ai ajouté une seconde span
juste pour montrer comment cela pourrait fonctionner}
// Bind to the DOMSubtreeModified Event
$('.user-location').bind('DOMSubtreeModified', function(e) {
console.info("EVENT TRIGGERT " + e.target.id);
});
// simulating the Change of the text value of span
function simulateChange(){
$('.user-location').each(function(idx, element){
element.innerText = "CHANGED " + idx;
});
}
setTimeout(simulateChange, 1000);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<span id="firstSpan" class="user-location">Unchanged 0</span><br/>
<span id="secondSpan" class="user-location">Unchanged 1</span>
Utiliser Javascript MutationObserver
//More Details https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver
// select the target node
var target = document.querySelector('.user-location')
// create an observer instance
var observer = new MutationObserver(function(mutations) {
console.log($('.user-location').text());
});
// configuration of the observer:
var config = { childList: true};
// pass in the target node, as well as the observer options
observer.observe(target, config);
Vous pouvez utiliser l'événement input
:
Comme ça :
$(document).ready(function(){
$(".user-location").on("input",function(){
console.log("You change Span tag");
})
})
Exemple :
<!DOCTYPE html>
<html>
<head>
<style>
span {
border: 1px solid #000;
width: 200px;
height: 20px;
position: absolute;
}
</style>
</head>
<body>
<span class="user-location" contenteditable="true"> </span>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(document).ready(function(){
$(".user-location").on("input",function(){
console.log("You change Span tag");
})
})
</script>
</body>
</html>
Utiliser l'API de mutation MutationObserver
// Select the node that will be observed for mutations
var targetNode = document.getElementById('some-id');
// Options for the observer (which mutations to observe)
var config = { attributes: true, childList: true };
// Callback function to execute when mutations are observed
var callback = function(mutationsList) {
for(var mutation of mutationsList) {
if (mutation.type == 'childList') {
console.log('A child node has been added or removed.');
}
else if (mutation.type == 'attributes') {
console.log('The ' + mutation.attributeName + ' attribute was modified.');
}
}
};
// Create an observer instance linked to the callback function
var observer = new MutationObserver(callback);
// Start observing the target node for configured mutations
observer.observe(targetNode, config);
// Later, you can stop observing
observer.disconnect();
Vous pouvez utiliser javascript
pour cela.
<html>
<body>
<span class="user-location" onchange="myFunction()">
<input type="text">
</span>
<script>
function myFunction() {
alert("work");
}
</script>
</body>
</html>
J'espère que ça va aider.