J'ai essayé:
$('input').keyup(function() {
$(this).attr('val', '');
});
mais il supprime le texte saisi légèrement après l’entrée d’une lettre. Est-il possible d'empêcher l'utilisateur de saisir du texte complètement sans avoir à désactiver le champ de texte?
Une alternative non-Javascript qui peut être facilement négligée: pouvez-vous utiliser l'attribut readonly
au lieu de l'attribut disabled
? Cela empêche de modifier le texte dans l'entrée, mais les navigateurs attribuent un style différent à l'entrée (moins susceptible de le "griser") <input readonly type="text" ...>
si vous ne voulez pas que le champ ait l'air "désactivé" ou normal, utilisez simplement ceci:
onkeydown="return false;"
il est fondamentalement le même que greengit et Derek a dit mais un peu plus court
$('input').keydown(function(e) {
e.preventDefault();
return false;
});
$('input').keypress(function(e) {
e.preventDefault();
});
Si vous souhaitez empêcher l'utilisateur d'ajouter quoi que ce soit, mais donnez-lui la possibilité d'effacer des caractères:
<input value="CAN'T ADD TO THIS" maxlength="0" />
Définir l'attribut maxlength
d'une entrée sur "0"
fait en sorte que l'utilisateur ne puisse pas ajouter de contenu , mais efface le contenu à sa guise .
<input value="THIS IS READONLY" onkeydown="return false" />
Définir l'attribut onkeydown
sur return false
fait en sorte que l'entrée ignore l'utilisateur keypresses dessus, les empêchant ainsi de modifier ou d’affecter la valeur.
utilisez simplement onkeydown = "return false" pour la balise de contrôle comme indiqué ci-dessous, elle n'acceptera pas les valeurs de l'utilisateur.
<asp:TextBox ID="txtDate" runat="server" AutoPostBack="True"
ontextchanged="txtDate_TextChanged" onkeydown="return false" >
</asp:TextBox>
Markup
<asp:TextBox ID="txtDateOfBirth" runat="server" onkeydown="javascript:preventInput(event);" onpaste="return false;"
TabIndex="1">
Scénario
function preventInput(evnt) {
//Checked In IE9,Chrome,FireFox
if (evnt.which != 9) evnt.preventDefault();}
Une autre méthode qui pourrait être utilisée en fonction du besoin $('input').onfocus(function(){this.blur()});
Je pense que c'est comme cela que vous l'écririez. Je ne suis pas compétent en jQuery.
J'aime en ajouter un qui fonctionne également avec la création de DOM javascript dynamique comme D3 où il est impossible d'ajouter:
//.attr(function(){if(condition){"readonly"]else{""}) //INCORRECT CODE !
pour empêcher les actions sur un élément DOM d'entrée HTML, ajoutez en lecture seule à 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 moins:
.readonly {
pointer-events: none;
}
ce qui est bien avec cette solution, c’est que vous pouvez l’activer de manière dynamique dans une fonction pour pouvoir l’intégrer par exemple dans D3 au moment de la création (impossible avec le seul attribut "readonly").
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 basculer la classe:
$( "div" ).toggleClass( "readonly", addOrRemove );
Juste pour être complet, bonne chance = ^)
Une option consiste à lier un gestionnaire à l'événement input
.
L’avantage de cette approche est que nous n’empêchons pas les comportements de clavier auxquels l’utilisateur s’attend (p. Ex. Onglet, page suivante ou précédente, etc.).
Un autre avantage est qu'il gère également le cas où la valeur d'entrée est modifiée en collant du texte dans le menu contextuel.
Cette approche fonctionne mieux si vous vous souciez uniquement de garder l'entrée vide. Si vous souhaitez conserver une valeur spécifique, vous devez effectuer le suivi ailleurs (dans un attribut de données?) Car elle ne sera pas disponible à la réception de l'événement input
.
const inputEl = document.querySelector('input');
inputEl.addEventListener('input', (event) => {
event.target.value = '';
});
<input type="text" />
Testé dans Safari 10, Firefox 49, Chrome 54, IE 11.
si le texte apparaît avant keyup, il est probablement déclenché par un événement keydown. Avez-vous déjà essayé celui-là?