Ändern Sie die Eingabe in Großbuchstaben

73

JS:

<script type="text/css">
$(function() {
    $('#upper').keyup(function() {
        this.value = this.value.toUpperCase();
    });
});
</script>

HTML

<div id="search">
        <input type="radio" name="table" class="table" value="professor" tabindex="1" /> Professor
        <input type="radio" name="table" class="table" value="department" tabindex="2" /> Department
        <input type="radio" name="table" id="upper" class="table" value="course" tabindex="3" /> Course
        <input type="text" name="search" class="keywords" value="Select an option..." onclick="this.value='';" onfocus="this.select()" onblur="this.value=!this.value?':this.value;" tabindex="4"  />
        <div id="content"> </div>
    </div>

Warum funktioniert das immer noch nicht? Ich versuche nur, div ".keywords" von JS aufzurufen.

Jshee
quelle
Ich wünschte, ich hätte Zeit, hier das zu setzen, was ich für die beste Antwort halte. Es geht darum, das Tastendruckereignis zu behandeln und den Schlüsselcode gegebenenfalls in Großbuchstaben zu ändern. Es ist einfacher als es sich anhört, Cross-Browser-kompatibel zu machen, aber ich denke, es ist die beste Lösung.
Juan Mendes
Eigentlich funktioniert die Lösung, an die ich gedacht habe, nur für IE ... e.was nur in FF und WebKit lesbar ist, aber mit IE können Sie e.keyCode ändern. Versuchen Sie dies in IE jsfiddle.net/48fSq/1
Juan Mendes

Antworten:

249

Ich denke, der eleganteste Weg ist ohne Javascript, aber mit CSS. Sie können verwenden text-transform: uppercase(dies ist nur für die Idee inline):

<input id="yourid" style="text-transform: uppercase" type="text" />

Bearbeiten:

Wenn Sie also in Ihrem Fall möchten, dass Schlüsselwörter in Großbuchstaben geschrieben werden, ändern Sie: keywords: $(".keywords").val(),in$(".keywords").val().toUpperCase(),

Tim
quelle
2
@ Tim - Sie dürfen keine End-Tags für INPUTs haben: w3.org/TR/html401/interact/forms.html#edef-INPUT
Jared Farrish
8
Wird die Benutzereingabe wirklich in Großbuchstaben geschrieben oder dient sie nur zur Anzeige hier?
BiAiB
38
Beachten Sie, dass beim Abrufen des Werts mit (nur) JavaScript der Originaltext zurückgegeben wird. dh nicht in Großbuchstaben. Beispiel hier
Shaz
23
Wenn Sie nur möchten, dass es in Großbuchstaben angezeigt wird, ist dies möglicherweise der Fall. Wenn Sie jedoch möchten, dass der tatsächliche Eingabewert in Großbuchstaben geschrieben wird, müssen Sie Ihre Bemühungen duplizieren, bevor Sie das Formular senden oder den Eingabewert verwenden, was es nicht so elegant macht.
Juan Mendes
5
Diese einfache Idee hat mich gerade vor den feurigen Tiefen der Ereignisinteraktion gerettet, die die Hölle brauen. Möge der Wind des Systemlüfters immer auf Ihrem Rücken sein. Möge der Kühlkörper warm auf Ihr Gesicht scheinen.
Jeromy French
51

Javascript-String-Objekte haben eine toLocaleUpperCase()Funktion, die die Konvertierung selbst vereinfacht.

Hier ist ein Beispiel für die Live-Großschreibung:

$(function() {
    $('input').keyup(function() {
        this.value = this.value.toLocaleUpperCase();
    });
});

Leider wird dadurch der Inhalt des Textfelds vollständig zurückgesetzt, sodass die Caret-Position des Benutzers (wenn nicht "das Ende des Textfelds") verloren geht.

Sie können dies jedoch mit etwas Magie des Browserwechsels wieder einhacken:

// Thanks http://blog.vishalon.net/index.php/javascript-getting-and-setting-caret-position-in-textarea/
function getCaretPosition(ctrl) {
    var CaretPos = 0;    // IE Support
    if (document.selection) {
        ctrl.focus();
        var Sel = document.selection.createRange();
        Sel.moveStart('character', -ctrl.value.length);
        CaretPos = Sel.text.length;
    }
    // Firefox support
    else if (ctrl.selectionStart || ctrl.selectionStart == '0') {
        CaretPos = ctrl.selectionStart;
    }

    return CaretPos;
}

function setCaretPosition(ctrl, pos) {
    if (ctrl.setSelectionRange) {
        ctrl.focus();
        ctrl.setSelectionRange(pos,pos);
    }
    else if (ctrl.createTextRange) {
        var range = ctrl.createTextRange();
        range.collapse(true);
        range.moveEnd('character', pos);
        range.moveStart('character', pos);
        range.select();
    }
}


// The real work

$(function() {
    $('input').keyup(function() {
        // Remember original caret position
        var caretPosition = getCaretPosition(this);

        // Uppercase-ize contents
        this.value = this.value.toLocaleUpperCase();

        // Reset caret position
        // (we ignore selection length, as typing deselects anyway)
        setCaretPosition(this, caretPosition);
    });
});

Letztendlich könnte es am einfachsten sein, es zu fälschen. Stellen Sie den Stil text-transform: uppercasefür das Textfeld so ein, dass er dem Benutzer in Großbuchstaben angezeigt wird. Wenden Sie dann in Ihrem Javascript die Textumwandlung einmal an, wenn der Caret-Fokus des Benutzers das Textfeld vollständig verlässt:

HTML:

<input type="text" name="keywords" class="uppercase" />

CSS:

input.uppercase { text-transform: uppercase; }

Javascript:

$(function() {
    $('input').focusout(function() {
        // Uppercase-ize contents
        this.value = this.value.toLocaleUpperCase();
    });
});

Hoffe das hilft.

Leichtigkeitsrennen im Orbit
quelle
1
+1 hat nicht an das Problem des Verlusts der Auswahl gedacht (und auch nicht an den Verlust des Cursors). Und es ist so nervig, wenn es passiert. Dies ist die beste Antwort auf mich
BiAiB
@Tomalak - Warum nicht im ersten Beispiel Focusout verwenden?
Jared Farrish
1
@Jared: Ich bin davon ausgegangen, dass das OP möchte, dass der Inhalt des Textfelds während der Benutzertypen automatisch in Großbuchstaben geschrieben wird . Ich würde es auf jeden Fall tun.
Leichtigkeitsrennen im Orbit
@ Tomalak - Ja. So viel einfacher beim Focusout zu ändern ... Aber das ist der erste Satz. Ich würde zumindest argumentieren, aber das ist nicht meine Antwort, also ist es nur ein Kommentar. :)
Jared Farrish
1
@ SJnawali Das Problem ist, dass Sie nicht die ganze Antwort gelesen haben. text-transform: uppercaseist für während des Tippens; Der Wert wird dann mit dem entsprechenden Großbuchstaben überschrieben, wenn der Fokus das Steuerelement verlässt.
Leichtigkeitsrennen im Orbit
9

Wenn Sie es für eine HTML-Eingabe verwenden , können Sie dies problemlos ohne die Verwendung von JavaScript tun! oder andere JS-Bibliotheken. Es wäre Standard und sehr einfach, eine CSS-Tag -Texttransformation zu verwenden :

<input type="text" style="text-transform: uppercase" >

oder Sie können eine Bootstrap-Klasse mit dem Namen "Text-Großbuchstaben" verwenden.

<input type="text" class="text-uppercase" >

Auf diese Weise ist Ihr Code viel einfacher!

Ebrahim
quelle
8

Lösungen, die value.toUpperCase verwenden, scheinen das Problem zu haben, dass durch Eingabe von Text in das Feld die Cursorposition auf das Ende des Texts zurückgesetzt wird. Lösungen, die Texttransformation verwenden, scheinen das Problem zu haben, dass der an den Server gesendete Text möglicherweise immer noch in Kleinbuchstaben geschrieben ist. Diese Lösung vermeidet diese Probleme:

function handleInput(e) {
   var ss = e.target.selectionStart;
   var se = e.target.selectionEnd;
   e.target.value = e.target.value.toUpperCase();
   e.target.selectionStart = ss;
   e.target.selectionEnd = se;
}
<input type="text" id="txtTest" oninput="handleInput(event)" />

BlueMonkMN
quelle
7

Kann es auch so machen, aber andere Wege scheinen besser zu sein. Dies ist praktisch, wenn Sie es nur einmal brauchen.

onkeyup="this.value = this.value.toUpperCase();"
Hocken
quelle
5

Versuchen:

$('#search input.keywords').bind('change', function(){
    //this.value.toUpperCase();
    //EDIT: As  Mike Samuel suggested, this will be more appropriate for the job
    this.value = this.value.toLocaleUpperCase();
} );
BiAiB
quelle
Sie müssen das Ergebnis irgendwo zuweisen, und dies funktioniert nicht, wenn der Benutzer tippt, da es changenur ausgelöst wird, wenn das Steuerelement den Fokus verliert.
Leichtigkeitsrennen im Orbit
Für Benutzereingaben .toLocaleUpperCaseist dies wahrscheinlich besser geeignet. developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…
Mike Samuel
@ Mike Samuel Du bist wahr, ich kannte diese Methode nicht. Hoffe, es ist Cross Browers, da ich es auf Msdn gesehen habe, werde ich meine Antwort aktualisieren
BiAiB
@BiAiB: Das ist kaputt ; Sie weisen die Großbuchstabenversion des Textes nichts zu.
Leichtigkeitsrennen im Orbit
1
@BiAiB toLocaleUpperCaseist browserübergreifend verfügbar, aber sein Verhalten ist nicht unbedingt für verschiedene Browser im selben Gebietsschema identisch, da es offensichtlich von der Version der auf dem lokalen Computer vorhandenen Zeichenzuordnungen abhängt. Es ist in Abschnitt 15.5.4.17 des EcmaScript-Sprachstandards angegeben. Prost, Mike
Mike Samuel
3

Ich konnte den Text-Großbuchstaben in Bootstrap, auf den in einer der Antworten verwiesen wird, nicht finden. Egal, ich habe es geschaffen;

.text-uppercase {
  text-transform: uppercase;
}

Dadurch wird Text in Großbuchstaben angezeigt, die zugrunde liegenden Daten werden jedoch nicht auf diese Weise transformiert. Also in jquery habe ich;

$(".text-uppercase").keyup(function () {
    this.value = this.value.toLocaleUpperCase();
});

Dadurch werden die zugrunde liegenden Daten überall dort geändert, wo Sie die Text-Großbuchstaben-Klasse verwenden.

arame3333
quelle
2
onBlur="javascript:{this.value = this.value.toUpperCase(); }

wird leicht in Großbuchstaben geändert.

Demo hier

Venkat
quelle
2

Ich denke, der einfachste Weg ist die Verwendung der Bootstrap-Klasse ".text-Großbuchstaben".

<input type="text" class="text-uppercase" />
Sush
quelle
Wie unterscheidet sich das von anderen Antworten?
Kurohige
1

Diese Antwort hat ein Problem:

style="text-transform: uppercase"

Außerdem wird das Platzhalterwort in Großbuchstaben umgewandelt, was unpraktisch ist

placeholder="first name"

Beim Rendern der Eingabe wird der Platzhalter "Vorname" in Großbuchstaben geschrieben

FIRST NAME

Also habe ich etwas Besseres geschrieben:

onkeypress="this.value = this.value + event.key.toUpperCase(); return false;"

es funktioniert gut!, aber es hat einige Nebenwirkungen, wenn Ihr Javascript-Code komplex ist,

Ich hoffe, es hilft jemandem, ihm eine Idee zu geben, um eine bessere Lösung zu entwickeln.

Tarık Seyceri
quelle
1

Hier verwenden wir das Ereignis onkeyup im Eingabefeld, das ausgelöst wird, wenn der Benutzer einen Schlüssel freigibt. Und hier ändern wir unseren Wert durch die Funktion toUpperCase () in Großbuchstaben .

Beachten Sie, dass text-transform = "Großbuchstaben" nur den Text im Stil ändert. aber nicht der Wert. Um den Wert zu ändern, verwenden Sie diesen Inline-Code, der den Wert anzeigt und ändert

<input id="test-input" type="" name="" onkeyup="this.value = this.value.toUpperCase();">

Hier ist das Code-Snippet, das bewiesen hat, dass der Wert geändert wurde

<!DOCTYPE html>
<html>
<head>
	<title></title>
</head>
<body>
	<form method="get" action="">
		<input id="test-input" type="" name="" onkeyup="this.value = this.value.toUpperCase();">
		<input type="button" name="" value="Submit" onclick="checking()">
	</form>
	<script type="text/javascript">
		function checking(argument) {
			// body...
			var x = document.getElementById("test-input").value
			alert(x);
		}
		
		
	</script>
</body>
</html>

Nahid
quelle
1
<input id="name" data-upper type="text"/>
<input id="middle" data-upper type="text"/>
<input id="sur" data-upper type="text"/>

Oben den Text eines dynamisch erstellten Elements mit dem oberen Attribut und wenn eine Keyup-Aktion ausgeführt wird

$(document.body).on('keyup', '[data-upper]', function toUpper() {
  this.value = this.value.toUpperCase();
});
Musa
quelle
upperist kein gültiges Attribut, stattdessen sollten Sie es verwenden data-upper. Der Hauptgrund für die Verwendung der Texttransformation in CSS neben so etwas ist, dass der Benutzer nicht sieht, dass sie von Klein- in Großbuchstaben konvertiert wird. Ihre Funktion ist auch anonym, es macht keinen Sinn, ihr einen Namen zu geben :)
zanderwar
0
**JAVA SCRIPT**
<html>
<body>
<script>
function @ToCaps(obj)
{
obj.value=obj.value.toUpperCase();
}
</script>
<input type="text" onkeyup=@ToCaps(this)"/>
</body>
</html>

**ASP.NET**
Use a css style on the text box, write css like this:

.ToCaps {Texttransformation: Großbuchstaben; }}

<asp:TextBox ID="TextBox1" runat="server" CssClass="ToCaps"></asp:Te writxtBox>

**OR**
simply write this code in textbox
<asp:TextBox ID="TextBox1" runat="server" style="text-transform:uppercase"></asp:TextBox>


 **1.Note you don't get intelligence until you type up to style="**  
Shashi Kiran Jillepally
quelle
1
Es wird niemals so funktionieren mit<script type="text/css">
swapnesh
0

Javascript hat eine toUpperCase()Methode. http://www.w3schools.com/jsref/jsref_toUpperCase.asp

Wo immer Sie es für am besten halten, um es in Ihren Code aufzunehmen, müssten Sie so etwas tun

$(".keywords").val().toUpperCase()
Irvin Dominin
quelle
Wie würde ich das nur für den Kursanruf tun?
Jshee
Es gibt eine Reihe von Möglichkeiten, dies zu tun. Am schnellsten und einfachsten ist es, es für "Kurs" einfach in den Koffer zu legen.
Wie mache ich das für: case 'course': phppage = 'course'; ext = '.php? cID ='; brechen;
Jshee
Entschuldigung, ich
bin
0

Sie können diesen HTML-Code ausprobieren

<input id="pan" onkeyup="inUpper()" />

JavaScript

function _( x ) {
  return document.getElementById( x );
}
  // convert text in upper case
  function inUpper() {
    _('pan').value = _('pan').value.toUpperCase();
  }
anand panwar
quelle