101 votes

Comment empêcher l'utilisateur de taper dans un champ de texte sans désactiver le champ?

J'ai essayé :

$('input').keyup(function() {

   $(this).attr('val', '');

});

mais cela supprime le texte saisi peu de temps après qu'une lettre soit saisie. Y a-t-il un moyen d'empêcher complètement l'utilisateur de saisir du texte sans avoir recours à la désactivation du champ de texte ?

1 votes

Est-ce que keydown() ou keypress() est plus efficace?

3voto

qw3n Points 2697

Une autre méthode qui pourrait être utilisée en fonction des besoins $('input').onfocus(function(){this.blur()}); je pense que c'est comme cela que vous l'écririez. Je ne suis pas compétent en jquery.

2voto

Stephen L Points 1462

Pour une solution utilisant uniquement le CSS, essayez de définir pointer-events: none sur l'entrée.

2voto

Toxxxiczny Points 81

La meilleure solution est de désélectionner l'entrée une fois que l'utilisateur clique dessus, de sorte qu'elle devienne comme en lecture seule

  onFocus={e => e.target.blur()}

1voto

Balisage

Script

function preventInput(evnt) {
//Vérifié dans IE9, Chrome, FireFox
if (evnt.which != 9) evnt.preventDefault();}

1voto

irJvV Points 624

J'aime en ajouter une qui fonctionne également avec la création dynamique du DOM en javascript comme D3 où il est impossible d'ajouter:

//.attr(function(){if(condition){"readonly"]else{""}) //CODE INCORRECT !

pour éviter les actions sur un élément DOM input HTML ajouter readonly à la classe:

var d = document.getElementById("div1");
d.className += " readonly";

Ou en D3:

 .classed("readonly", function(){
   if(condition){return true}else{return false}
 })

ET ajouter au CSS ou less:

.readonly {
  pointer-events: none;
}

La bonne chose à propos de cette solution est que vous pouvez l'activer et la désactiver dynamiquement dans une fonction afin qu'elle puisse être intégrée par exemple dans D3 au moment de la création (pas possible avec le seul attribut "readonly").

pour supprimer l'élément de la classe:

document.getElementById("MyID").className =
  document.getElementById("MyID").className.replace(/\breadonly\b/,'');

ou utilisez Jquery:

$( "div" ).removeClass( "readonly" )

ou basculez la classe:

$( "div" ).toggleClass( "readonly", addOrRemove );

Juste pour être complet, bonne chance =^)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X