0

How can I detect a change inside an <span> element I need to attach a handler to it but can't succeed.

Here is my html:

<span class="pad-truck-number-position"><?php echo $_SESSION['truckId']; ?></span>

And this is my javascript/jQuery:

<script type="text/javascript">
    var changedText = $('.pad-truck-number-position').text();
    alert(changedText);
    $(changedText).on('change',function() {
        alert("changed");   
    });
</script>

alert(changedText) does work fine. But when the text inside the span changes it doesn't alert alert("changed");

This is how I change the element:

          truckTable.$('tr.selected').removeClass('selected');
        $(this).addClass('selected');
        var nTds = $('td', this);
            var index = $(nTds[0]).text();
            $.ajax({
                type: "POST",
                url : "content/right-up/trucks.php/",
                data: { truckid : index },
                headers : {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'}
            }).done(function(response){
                $('.pad-truck-number').text(index);
                $('.pad-truck-number-position').text(index);
                $('#mapContent').load("content/left-up.php");
                $('#right-down-tab-truck').tabs('load', 0);
                $('#right-down-tab').hide();
            $('#right-down-tab-truck').show();
            });
Daan
  • 12,099
  • 6
  • 34
  • 51

2 Answers2

2

You can try:

To execute it once:

  jQuery('.pad-truck-number-position').one("DOMSubtreeModified",function(){   
         //Notice the .one not .on
         //Your code
 });

Or multiple times:

 jQuery('.pad-truck-number-position').on("DOMSubtreeModified",function(){   

         //Your code
 });
Think Different
  • 2,815
  • 1
  • 12
  • 18
1

You could bind DOMSubtreeModified to check if the text inside is modified:

<script type="text/javascript">
var changedText = $('.pad-truck-number-position').text();
alert(changedText);
$('.pad-truck-number-position').bind('DOMSubtreeModified', function(event) {
    alert('changed');
});
</script>

Or using mutation observers:

<script type="text/javascript">
var changedText = $('.pad-truck-number-position').text();
var element = $('.pad-truck-number-position')[0];
// var original_text = element.text();

var observer = new MutationObserver(function( mutations ) {
    mutations.forEach(function( mutation ) {
        var newNodes = mutation.addedNodes;
        if( newNodes !== null ) {
            alert('changed');
        }
    });
});

var config = { attributes: true, childList: true, characterData: true };
observer.observe(element, config);
</script>

Here is a good find:

Community
  • 1
  • 1
Kevin
  • 41,694
  • 12
  • 53
  • 70