2015-06-23 8 views
7

mam poniższy kawałek kodu, który jest używany do symulacji pola tekstowego:jQuery- Wykrywanie zmian w treści pola SPAN

<label for="alertCmpVal">ALERT VALUE:</label> 
<span class="center textBox displayField highlight" id="alertCmpVal" contenteditable> <?php print $alert_val;?> </span> 

Muszę wiedzieć, kiedy zmienia się treść, na przykład Klikam na nią i zmienić go od 0 do 1.

Próbowałem:

$(document).ready(function() 
{ 
    $(document.body).on('change','#alertCmpVal',function() 
    { 
     alert("boo"); 
     $('#alertCmpVal').removeClass('highlight'); 
    }) 
} 

ale to nie wydają się działać.

(nb $(document.body) jest stosowany ze względu na mojej stronie głównej, pole początkowa jest ładowany dynamicznie)

Zgaduję, że jest „zmiany”, że nie podoba, ale nie może zobaczyć, co aby go zastąpić. (jQuery/HTML5 jest w porządku, ponieważ jest używany tylko wewnętrznie).

Widziałem kilka przykładów, ale generalnie wydają się one być dla bardziej złożonych scenariuszy, wymagających wielu funkcji do wykrywania zmiany, gdy pewne inne rzeczy występują, ale sądzę, że musi istnieć prostsze rozwiązanie podobne do metody on change .

+0

łaskawie przyjąć odpowiedź, która odpowiada Twoim potrzebom. Minął prawie rok. Nie masz lepszego? –

Odpowiedz

31

Można użyć tego zdarzenia DOMSubtreeModified:

$("span").on('DOMSubtreeModified', function() { 
    alert("Span HTML is now " + $(this).html()); 
}); 

urywek

$(function() { 
 
    $("a").click(function() { 
 
    $("span").html("Hello, World!"); 
 
    }); 
 
    $("body").on('DOMSubtreeModified', "span", function() { 
 
    alert("Span HTML is now " + $(this).html()); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<span>Hello</span> 
 
<a href="#">Click</a>

+0

Jest to bardzo blisko, ale uruchamia się, gdy dom jest zmodyfikowany dla elementu AT ALL, nie tylko dla html. Oznacza to, że wszystkie niestandardowe style, atrybuty, elementy danych lub podobne będą również powodować to. –

+0

Myślę, że to wydarzenie jest również przestarzałe w specyfikacji poziomu DOM 3. Mozilla dokumentuje zdarzenia mutacji jako następcę, ale nie jestem pewien, czy są one powszechnie akceptowane. –

-7

myślę, że ten kod będzie pomóc.

$(document).ready(function() { 
    $('#myId').bind("contentchange", function(){ 
     alert("Changed"); 
    }); 

    $("#btn").click(function() { 
     $('#myId').html("Value").trigger("contentchange"); 
    }); 
}); 

http://jsfiddle.net/RKLmA/192/

+0

To nie wykrywa zmiany zawartości w zakresie, który jest tym, czym jest pytanie. –

Powiązane problemy