| 

.NET C# Java Javascript Exception

2
Ich habe folgende Seite und möchte eigentlich nur ein KeyDown-Event für meine Textbox haben:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="WebApplication4.WebForm2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
$('TextBox1').keydown(event)
{
alert("Test");
}
</script>

<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</div>
</form>
</body>
</html>


EDIT:
Alternativ hab ich noch diese Schreibweise gefunden:
$('TextBox1').keydown(function () {
alert("Test 2");
})

Damit bekomme ich dann weder beim Starten der Seite, noch beim Schreiben in die Textbox einen alert.

Allerdings poppt mein Alert aktuell nur auf, wenn ich die Seite lade und nicht, wenn ich einen Knopf in meiner Textbox drücke.

Wird wohl irgendein JavaScript-Anfängerfehler sein. Allerdings finde ich aktuell nur Beispiele, in denen es so gemacht wird, wie ich es gerade auch versuche.

Wo liegt denn mein Fehler?
04.06.2012
Feroc 1,2k 2 9
Feroc 1,2k 2 9
1 Antwort
1
Weil der Selektor für jQuery falsch geschrieben ist:

Wenn du ein Element anhand seiner ID selektieren willst musst du ein Raute-Zeichen "#" davor stellen. Siehe hier:

$('#TextBox1').keydown(function () {
alert("Test 2");
});


Alternativ kannst du ein Element auch anhand seines Names, oder einer CSS-Klasse oder Attribut, ... selektieren. Ein paar Beispiele:

$(".CssKlass") //beginnt immer mit einem Punkt
$("TAG") //HTML-Tag, z.B. BODY, TD, TABLE, DIV, ...
$("[name=NameDerTextBox]") //anhand eines Attributes, z.B. den Namen
$("DIV.CssKlasseABC") //kombiniert: alle DIV's mit der CSS-Klasse "CssKlasseABC"
....


Edit:

Jetzt kommt noch das Problem hinzu das ASP.Net die ID's und Namen nicht 1 zu 1 in den HTML-Quelltext übernimmt sondern umschreibt. Zum Beispiel zu: "ctl00_MainContent_IdOfField". Das kannst du umgehen in dem du das Feld mit einer CSS-Klasse ansprichst oder die korrekte ID vom ASP.Net dir einsetzten lässt:

<asp:TextBox ID="TextBox1" name="TextBox1" runat="server"></asp:TextBox>
<script>
$('#<%=TextBox1.ClientID%>').keydown(function () {
alert("Test 2");
});
</script>


Alternativ kannst du auch das Element so suchen, was aber bei sehr häufiger Verwendung zu lasten der JavaScript-Perfomence geht:

<asp:TextBox ID="TextBox1" name="TextBox1" runat="server"></asp:TextBox>
<script>
$("[id$=_TextBox1]").keydown(function () {
alert("Test 2");
});
</script>


Edit 2 (Wann wird JavaScript ausgeführt):

Es gibt grundsätzlich 2 unterschiedliche Zeitpunkte zu denen JavaScript-Code ausgeführt wird. In den folgenden zwei Beispielen erkläre ich den Unterschied:

JavaScript-Code der direkt ausgeführt wird:

<input id="Feld1" value="Test1">
<script>
alert($('#Feld1').val()); //Funktioniert, da Feld1 bereits geladen ist
alert($('#Feld2').val()); //Funktioniert nicht, da Feld2 erst weiter unten im HTML steht und somit noch nicht geladen ist
</script>
<input id="Feld2" value="Test2">


JavaScript-Code der erst nachdem die Seite und alle Includes vollständig geladen sind ausgeführt wird:

<input id="Feld1" value="Test1">
<script>
$(function(){
alert($('#Feld1').val()); //Funktioniert
alert($('#Feld2').val()); //Funktioniert nun auch, da der Code ja erst ausgeführt wird wenn die Seite vollständig geladen ist
});
</script>
<input id="Feld2" value="Test2">
04.06.2012
Floyd 14,6k 3 9
Floyd 14,6k 3 9
Ob mit oder ohne Raute, das funktioniert nicht. Es passiert einfach gar nichts. Haben dein Beispiel 1:1 rauskopiert.
Habe es auch mit "[name=TextBox1" probiert, bewirkt auch nichts.
Feroc 04.06.2012
Sorry mein Fehler. Hab meinen Beitrag editiert und um die entsprechenden Infos und Beispiele ergenzt.
Floyd 04.06.2012
Danke dir, jetzt funktioniert es. Interessanter Fakt für mich: Das Script muss unter dem Button stehen.
Feroc 04.06.2012
Ja und Nein. Es gibt zwei verschiedene Zeitpunkte zu denen JavaScript-Code ausgeführt werden kann. Eine Erklärung findest du in Edit 2.
Floyd 04.06.2012

Stelle deine Javascript-Frage jetzt!