Comment puis-je forcer input à la majuscule dans un ASP.NET textbox?
j'écris un ASP.NET application. J'ai une boîte de texte sur une webform, et je veux forcer n'importe quel type d'utilisateur à la majuscule. J'aimerais le faire sur la face avant. Vous devriez également noter qu'il y a un contrôle de validation sur cette textbox, donc je veux m'assurer que la solution n'interfère pas avec ASP.NET validation.
Précision: Il semble que la transformation du texte CSS fasse apparaître les entrées de l'utilisateur en majuscules. Cependant, sous le capot, c'est toujours cas inférieur lorsque le contrôle de validation échoue. Vous voyez, mon contrôle de validation vérifie si un code d'état valide est entré, cependant l'expression régulière que j'utilise ne fonctionne qu'avec des caractères majuscules.
20 réponses
pourquoi ne pas utiliser une combinaison du CSS et du backend? Utilisation:
style='text-transform:uppercase'
sur la boîte de texte, et dans votre code d'utilisation:
Textbox.Value.ToUpper();
Vous pouvez également facilement changer votre regex sur le validateur d'utiliser des minuscules et des majuscules. C'est probablement la solution plus facile que de leur imposer un Majuscule.
Utilisez un style CSS sur la zone de texte. Votre CSS devrait être quelque chose comme ceci:
.uppercase
{
text-transform: uppercase;
}
<asp:TextBox ID="TextBox1" runat="server" Text="" CssClass="uppercase"></asp:TextBox>;
OK, après les tests, voici une meilleure solution, plus propre.
$('#FirstName').bind('keyup', function () {
// Get the current value of the contents within the text box
var val = $('#FirstName').val().toUpperCase();
// Reset the current value to the Upper Case Value
$('#FirstName').val(val);
});
**I would do like:
<asp:TextBox ID="txtName" onkeyup="this.value=this.value.toUpperCase()" runat="server"></asp:TextBox>**
Vous pouvez intercepter les évènements de la touche press, annuler ceux en minuscules, et ajouter leurs versions en majuscules à l'entrée:
window.onload = function () {
var input = document.getElementById("test");
input.onkeypress = function () {
// So that things work both on Firefox and Internet Explorer.
var evt = arguments[0] || event;
var char = String.fromCharCode(evt.which || evt.keyCode);
// Is it a lowercase character?
if (/[a-z]/.test(char)) {
// Append its uppercase version
input.value += char.toUpperCase();
// Cancel the original event
evt.cancelBubble = true;
return false;
}
}
};
cela fonctionne à la fois dans Firefox et Internet Explorer. Vous pouvez le voir en action ici.
<!-- Script by hscripts.com -->
<script language=javascript>
function upper(ustr)
{
var str=ustr.value;
ustr.value=str.toUpperCase();
}
function lower(ustr)
{
var str=ustr.value;
ustr.value=str.toLowerCase();
}
</script>
<form>
Type Lower-case Letters<textarea name="address" onkeyup="upper(this)"></textarea>
</form>
<form>
Type Upper-case Letters<textarea name="address" onkeyup="lower(this)"></textarea>
</form>
je viens de faire quelque chose de similaire aujourd'hui. Voici la version modifiée:
<asp:TextBox ID="txtInput" runat="server"></asp:TextBox>
<script type="text/javascript">
function setFormat() {
var inp = document.getElementById('ctl00_MainContent_txtInput');
var x = inp.value;
inp.value = x.toUpperCase();
}
var inp = document.getElementById('ctl00_MainContent_txtInput');
inp.onblur = function(evt) {
setFormat();
};
</script>
en gros, le script fixe un événement qui se déclenche lorsque la zone de texte perd sa mise au point.
je le ferais en utilisant jQuery.
<script src="Scripts/jquery-1.3.2.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#txt").keydown(function(e) {
if (e.keyCode >= 65 & e.keyCode <= 90) {
val1 = $("#txt").val();
$("#txt").val(val1 + String.fromCharCode(e.keyCode));
return false;
}
});
});
</script>
/script dossier.
j'ai fait quelques analyses sur cette question sur quatre versions de navigateur populaires.
- la balise style simple affiche les caractères en majuscules mais la valeur de contrôle reste quand même en minuscules
- la fonctionnalité keypress utilisant le code char affiché ci-dessus est un peu inquiétante certains comme dans firefox chrome et safari il désactive la fonctionnalité à Ctrl+ V dans le contrôle.
- l'autre problème avec l'utilisation du niveau de caractère pour majuscules est pas la traduction de l'ensemble de la chaîne en majuscules.
la réponse que j'ai trouvée est d'implémenter ceci sur keyup en conjonction avec la balise style.
<-- form name="frmTest" --> <-- input type="text" size=100 class="ucasetext" name="textBoxUCase" id="textBoxUCase" --> <-- /form --> window.onload = function() { var input = document.frmTest.textBoxUCase; input.onkeyup = function() { input.value = input.value.toUpperCase(); } };
text-transform
CSS property specifies how to capitalize an element's text. It can be used to make text appear in all-uppercase or all-lowercase
CssClass
WebControl.CssClass Propriété
vous pouvez en apprendre plus sur elle - https://developer.mozilla.org/en/docs/Web/CSS/text-transform
utiliserStyle="text-transform: uppercase;"
ou CssClass="upper"
définissez le style sur la boîte de texte comme text-transform: uppercase?
CSS pourrait être de l'aide ici.
style="text-transform: uppercase";"
est-ce que cela aide?
voici une solution qui a fonctionné pour moi.
http://plugins.jquery.com/project/bestupper
vous devez obtenir le JavaScript de http://plugins.jquery.com/files/jquery.bestupper.min.js.txt et voilà.
Fonctionne comme un charme!
j'utilise une simple déclaration en ligne
<asp:TextBox ID="txtLocatorName" runat="server"
style="text-transform:uppercase" CssClass="textbox"
TabIndex="1">
</asp:TextBox>
si vous ne voulez pas utiliser les classes css, vous pouvez simplement utiliser la déclaration de style inline.(Juste visiblement mettre en majuscules) :)
du côté du serveur
string UCstring = txtName.Text.ToUpper();
je me rends compte qu'il est un peu tard, mais je n'ai pas pu trouver une bonne réponse qui a fonctionné avec ASP.NET AJAX, so I fixed the code above:
function ToUpper() {
// So that things work both on FF and IE
var evt = arguments[0] || event;
var char = String.fromCharCode(evt.which || evt.keyCode);
// Is it a lowercase character?
if (/[a-z]/.test(char)) {
// convert to uppercase version
if (evt.which) {
evt.which = char.toUpperCase().charCodeAt(0);
}
else {
evt.keyCode = char.toUpperCase().charCodeAt(0);
}
}
return true;
}
Utilisés de la sorte:
<asp:TextBox ID="txtAddManager" onKeyPress="ToUpper()" runat="server"
Width="84px" Font-Names="Courier New"></asp:TextBox>
JavaScript a la fonction "toUpperCase ()" d'une chaîne de caractères.
Donc, quelque chose le long de ces lignes:
function makeUpperCase(this)
{
this.value = this.value.toUpperCase();
}
<telerik:RadTextBox ID="txtCityName" runat="server" MaxLength="50" Width="200px"
Style="text-transform: uppercase;">
$().ready(docReady);
function docReady() {
$("#myTextbox").focusout(uCaseMe);
}
function uCaseMe() {
var val = $(this).val().toUpperCase();
// Reset the current value to the Upper Case Value
$(this).val(val);
}
C'est une réutilisables approche. N'importe quel nombre de boîtes de texte peut être fait de cette façon sans les nommer. Une solution de page large pourrait être obtenue en changeant le sélecteur dans docReady.
mon exemple utilise la mise au point perdue, la question ne précisait pas comme ils tapent. Vous pourriez déclencher le changement si c'est important dans votre scénario.