.preventDefault () ne fonctionne pas sur. (‘input’, function {})

J’aimerais limiter le nombre de caractères de ma division modifiable à 10. Une fois que l’utilisateur a atteint la limite, j’aimerais utiliser la méthode .preventDefault () pour protéger la division de caractères supplémentaires. Pouvez vous m’aider s’il vous plait? JSFiddle https://jsfiddle.net/7x2dfgx6/1/ HTML

OOOOO

JQuery

  jQuery(document).ready(function($){ const limit = 10; rem = limit - $('#About').text().length; $("#counter").append("You have " + rem + " chars left."); $("#About").on('input', function(event) { var char = $('#About').text().length; rem = limit - char; $("#counter").html("You have " + rem + " chars left."); if(char>limit) { event.preventDefault(); //TODO } }); }); 

Pour répondre à votre question principale:
.preventDefault() annuler le comportement des événements pouvant être annulés . événement d’ input n’est pas.

Pour vérifier si un event est annulable, essayez: console.log(event.cancelable); .
Pour l’ input il dit “faux”


Vous voudrez peut-être quelque chose comme ceci (non testé):

 const limit = 10; var rem = limit - $('#About').text().length; $("#counter").append("You have " + rem + " chars left."); $("#About").on('input', function(event) { var char = $(this).text().length; rem = limit - char; if(rem <= 0){ $(this).text($(this).text().slice(0, limit)); } $("#counter").html("You have " + rem + " chars left."); }); 

MODIFIER

JSFiddle demo
Comme c’est contentEditable , j’ai dû utiliser un code supplémentaire (à partir de cette réponse) pour définir un signe d’insertion à la fin de l’entrée.

utiliser keydown au lieu de l’ input

 jQuery(document).ready(function($){ const limit = 10; rem = limit - $('#About').text().length; $("#counter").append("You have " + rem + " chars left."); $("#About").on('keypress', function(event) { var char = $('#About').text().length; if(char>limit) { return false; //or event.preventDefault(); //TODO } rem = limit - char; $("#counter").html("You have " + rem + " chars left."); }); }); 

DEMO

Essayez de changer la valeur de l’atsortingbut contenEditable. Aussi, je règle le contrôle de la limite à> =

 jQuery(document).ready(function($){ const limit = 10; rem = limit - $('#About').text().length; $("#counter").append("You have " + rem + " chars left."); $("#About").on('input', function(event) { var char = $('#About').text().length; rem = limit - char; event.preventDefault(); if(char>=limit) { $('#About').attr('contenteditable','False'); //TODO } $("#counter").html("You have " + rem + " chars left."); }); });