web-dev-qa-db-fra.com

jQuery: comment gérer le changement de texte d'étendue

J'utilise jQuery et je veux montrer un peu de calcution dans un span (appelé span1) et je veux quand texte de span1 modifié pour calculer sa valeur et l'afficher dans d'autres étendues (appelées `span2, span3, ...). Comment puis-je gérer le changement de texte d'intervalle?

merci

35
Arian

Vous pouvez utiliser la fonction qui modifie le texte de span1 pour modifier le texte des autres.

Pour contourner le problème, si vous voulez vraiment qu'il y ait un événement change, n'attribuez pas de texte au texte sur 1. Plutôt que de créer une variable d'entrée dans jQuery, écrivez-lui un événement change et changez-le. le texte de span1 .. change à la place la valeur de votre variable d'entrée, déclenchant ainsi un événement de changement, comme suit:

var spanChange = $("<input />");
function someFuncToCalculateAndSetTextForSpan1() {
    //  do work
    spanChange.val($newText).change();
};

$(function() {
    spanChange.change(function(e) {
        var $val = $(this).val(),
            $newVal = some*calc-$val;
        $("#span1").text($val);
        $("#spanWhatever").text($newVal);
    });
});

Même si je sens vraiment que cette "solution de contournement", bien que utile dans certains aspects de la création d'un simple événement de changement, est très étendue et qu'il vaut mieux modifier les autres en même temps1.

15
SpYk3HH

Span n'a pas d'événement 'change' par défaut. Mais vous pouvez ajouter cet événement manuellement.

Écoutez l'événement de changement d'envergure.

$("#span1").on('change',function(){
     //Do calculation and change value of other span2,span3 here
     $("#span2").text('calculated value');
});

Et partout où vous modifiez le texte dans span1. Déclenchez manuellement l'événement change.

$("#span1").text('test').trigger('change'); 
26
Ruchit Patel