7
votes

Comportement étrange .replace () dans le navigateur chrome

$(".allownumericwithdecimal").live("keypress keyup ", function (event) {
    $(this).val($(this).val().replace(/[^0-9\.]/g, ''));
    var text = $(this).val();
    if (!((event.which >= 48 && event.which <= 57) || event.which == 8 || event.which == 46 || event.which == 110 || event.which == 0)) {
        var text = $(this).val();
        if ((text.indexOf('.') != -1) && (text.substring(text.indexOf('.'), text.indexOf('.').length).length > 2)) {
            //event.preventDefault();
        }
    }
    var text = $(this).val();
    if ((event.which >= 48 && event.which <= 57) && (text.indexOf('.') != -1)) {
        if ((text.substring(text.indexOf('.'), text.indexOf('.').length).length) > 2) {
            //event.preventDefault();
        }
        if (event.which == 190) {
            //event.preventDefault();
        }
    }
    if (text.indexOf('.') != -1 && event.which == 190) {
        if (text.match("^[0-9]+(\.[0-9]{0,2})?$")) {} else {
            $(this).val('');
        }
    }
    if (text.indexOf('.') == -1 && text.length > 7 && (event.which != 190 && event.which != 8 && event.which != 46 && event.which != 110 && event.which != 0)) {
        event.preventDefault();
    }
});

4 commentaires

Intéressant, mais test de test n'est pas clair, ajoutez des valeurs d'entrée appropriées et de la sortie réelle de votre sortie.


Chaque fois que vous appuyez sur le clavier, il remplace la valeur avec une nouvelle. Donc, ce dont vous avez besoin, c'est de faire un test avant de remplacer la valeur de l'élément d'entrée .


@ S͢KYD͢ream Merci, j'étais en réunion au cours de la dernière heure et une question est déjà résolue. Dois-je encore ajouter une entrée appropriée et des valeurs de sortie souhaitées pour les futurs demandeurs ??


@Rishiprakash non non je comprends bien, bien merci bon que. :)


4 Réponses :


0
votes

keppress semble être le coupable lorsque j'ai changé le violon pour simplement utiliser keyup le remplacement est arrivé correctement (bien que le curseur décalé à la fin)

http://jsfiddle.net/lx9h2smh/1/


1 commentaires

le curseur ne doit pas passer à la fin.



2
votes

Essayez ce code , il fonctionne. jsfiddle

Je viens de faire un test xxx < p> expliquer

Vous vous assurez simplement que l'utilisateur saisir la valeur de ce que vous voulez. Vous remplacez si la valeur entrée n'est pas un entier . VOTRE REGEX MOYENNE: "Ceux qui ne sont pas entier ni ponctionnez (.), Remplacez-les par une valeur vide" . C'est pourquoi vous devez faire ce test. Par conséquent, si l'utilisateur entre dans la valeur souhaitée, il ne fait pas l'action Remplacer et il ne passe pas au test.


7 commentaires

J'ai voté votre réponse. Ce n'est pas posté par moi mec !!


Je pensais que tu es celui qui a posé cette question! Merci pour le vote! :)


@Radonirinamaminiaina J'étais celui qui a posté ce code :) Merci de l'aide.


@Rishiprakash C'est un grand plaisir de vous aider.


@Radonirinamaminiaina pouvez-vous aussi ajouter une explication théorique pour cela, je veux dire comment votre code fonctionne?


@Radonirinamaminiaina Oui, même si je l'ai également compris. :)


Oui, vous l'avez presque fait, si vous n'avez pas oublié le test! ;)



-1
votes

Enlevez simplement l'événement «KeyPress 'Event KeyPress Event est très similaire à celui de l'événement de la clé. Si vous appuyez sur une touche KeyPress Event, vous ne pouvez pas identifier le caractère. Dans votre code, il faut comme entrée de courant vide afin de remplacer le caractère.


0 commentaires

1
votes

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<div>
    <input type="text" class="allownumericwithdecimal"/>saadad
</div>


1 commentaires

Ouais bien travailler. Mais code supplémentaire pour la position du curseur. :( Remarque: la question n'a pas demandé par moi.