Comment limiter le nombre de frappe dans la saisie de texte

J’ai une entrée de texte pour le changement de page de pagination. Je dois limiter la saisie des numéros de page à un certain nombre, par exemple 15 (nombre de pages maximum). Donc, j’essaie avec ce code ci-dessous, mais toujours lorsque le nombre est supérieur à 15, la valeur passe à 15 et au nombre de frappe actuel.

actual.on('keypress', function() { console.log('test'); var t = $(this); if (t.val()  15) t.val('15'); }); 

Fiddle: http://jsfiddle.net/v6fhobr7/

Quelqu’un peut aider?

Essayez de changer de 'keypress' à 'keyup' … il y a un léger scintillement, mais cela fonctionne.

Utilisez un champ number .

  

La solution de @rfornal fonctionne bien , mais il est difficile de saisir une valeur à un chiffre à moins d’être très rapide:

http://jsfiddle.net/v6fhobr7/7/

Il est donc préférable de définir un léger délai d’attente avant de modifier la valeur:

 var actual = $('.actual'); var tm; actual.on('keyup', function () { var t = $(this); if (tm) clearTimeout(tm); tm = setTimeout(function() { if (t.val() < 1) t.val('1'); if (t.val() > 15) t.val('15'); }, 250); }); 

Démo JSFiddle: http://jsfiddle.net/v6fhobr7/10/

Dans jQuery 2.x, vous pouvez utiliser actual.on('input') , qui fait ce que vous voulez sans le scintillement.

Notez que cela empêchera l’utilisateur d’effacer entièrement l’entrée; si vous voulez autoriser cela, vous pouvez gérer le cas où t.val() == '' explicitement.

 actual.on('input', function(e) { var t = $(this); if (t.val() == '') return; if (t.val() < 1) t.val('1'); if (t.val() > 15) t.val('15'); }); 

http://jsfiddle.net/v6fhobr7/12/

Modifier:

Notez que cette solution ne limite pas la saisie aux seuls caractères numériques (vous pouvez toujours taper des lettres et des symboles). Si vous voulez empêcher cela, utilisez cette solution en plus de ma réponse ci-dessus.

Ou, si vous ne vous souciez pas d’IE 9 ou des navigateurs mobiles, la réponse de Mathletics est la meilleure.