Hi,
ich möchte, wenn in meiner Textbox die Enter Taste gedrückt wird, einen Button_Click auslösen.
Dazu habe ich folgendes gefunden und ausprobiert:
<SCRIPT>
function submitOnEnter(submitBtn) {
var keyCode = document.all ? event.keyCode :evt.which ? evt.which :
evt.keyCode ? evt.keyCode : evt.charcode;
if (keyCode == 13) submitBtn.click();
}
</script>
Textbox1.Attributes.Add("onkeydown","submitOnEnter(this.form." + Button1 +")");
Leider funktioniert das nicht.
Ich habe auch probiert den übergebenen button wegzulassen und statt submitBtn.click() direkt Button1.click() aufzurufen. Das ging auch nicht.
Bei MSN habe ich eine OnEnter Funktion gefunden Textbox1_OnEnter()
nur leider habe ich keine Ahnung wie ich diese Funktion der Textbox hinzufügen soll. Als Ereignis wird nur OnTextChange angeboten.
Wie bekomme ich das hin?
Hier wurd mal der umgekehrte Weg besprochen Enter Taste verbieten also Enter verbieten.
Textbox1.Attributes.Add("onkeydown","submitOnEnter(this.form." + Button1 +")");
// kann nicht funktionieren das Du das Object "Button1" übergibst,
// da es aber clientseitig aufgerufen werden soll wäre folgendes sinnvoller
Textbox1.Attributes.Add("onkeydown","submitOnEnter(this.form." + Button1.ClientID +")");
Gruß Jörg
function submitOnEnter(e) {
var submitBtn = document.getElementById(e);
// debug
alert(e);
if(event.which || event.keyCode)
{
if ((event.which == 13) || (event.keyCode == 13))
{
submitBtn.click();
return false;
}
} else
{
return true
};
}
Aufruf dann mit:
Textbox1.Attributes.Add("onkeydown", submitOnEnter('" +Button1.ClientID + "');");
Schau Dir mal den gerenderten HTML-Source Code an. Da sieht man das recht schnell was nicht passt.
Jörg
@Kai das snippet setzt aber einen globalen onkeydown ein, somit würde jedes RETURN die Funktion aufrufen, und evtl. eine bestehende Zuweisung auf document.onkeydown überschreiben.
Ohne eine Abfrage auf existierende Funktionszuweisung ist das ein "gefährlicher" Weg.
Jörg
EDIT: Irgendwo wurde das hier mal diskutiert und mit einer "netten" Function belebt, die es möglich macht mehrere Zuweisungen auf z.B. document.onkeydown durchzuführen, aber irgendwie finde ich das über die Suche nicht mehr.
Es funzt leider immer noch nicht?
Die javascript funktion wird zwar ausgeführt.
Die Seite macht sichtbar einen Reload, nur meine Button.Click Funktion wird leider nicht ausgeführt.
Poste mal deinen erzeugten HTML-Source als Attachment(zip) ich habe da eine Vermutung 🙂
Jörg
Ändere mal folgenden Code:
Textbox1.Attributes.Add("onkeydown","submitOnEnter(this.form." + Button1.ClientID +")");
//in
Textbox1.Attributes.Add("onkeydown","submitOnEnter('" + Button1.ClientID +"');");
Dieser Aufruf bezieht sich nämlich noch auf die "alte" function
Jörg
<script type="text/javascript">
function fnSubmit(evt){
if (!evt) evt = window.event;
if (evt.keyCode == 13) document.forms[0].submit();
};
</script>
...
...
TextBox1.Attributes["onkeydown"] = "fnSubmit()";
Grüsse
document.forms[0].submit();
führt aber nur ein Postback durch, ohne das seine OnButtonClick-Methode im Codebehind angesprochen werden würde, weil sender die Form und nicht der Button ist.
Jörg
Dann mache es so...
<script type="text/javascript">
function fnSubmit(sButton, evt){
if (!evt) evt = window.event;
if (evt.keyCode == 13) __doPostBack(sButton, '');
};
</script>
...
...
TextBox1.Attributes["onkeydown"] = "fnSubmit('" + myButton.ClientID + "')";
Grüsse
Es gibt einen ersten Erfolg:
Mit der Funktion
<SCRIPT>
function submitOnEnter(e) {
var submitBtn = document.getElementById(e);
// debug
//alert(e);
if(event.which || event.keyCode)
{
if ((event.which == 13) || (event.keyCode == 13))
{
submitBtn.click();
return false;
}
} else
{
return true
};
}
</script>
TextBox1.Attributes.Add("onkeydown", "submitOnEnter('ctl00_Button1')");
wird meine Button_Click Funktion aufgerufen.
Es gibt aber dennoch ein Problem,
die Funktion wird zwar aufgerufen, nur leider wird mein Response.Redirect nicht ausgeführt. Klicke ich auf den Button geht alles, beim Enter geht alles bis auf die Weiterleitung. Ich habe die Button_Click Funktion so gut es geht untersucht, konnte aber keinen Unterschied feststellen.
Bei diesem Phänomen bin ich wirklich überfragt und hoffe ihr habt da mehr Ideen?
sender und e scheinen auch identisch zu sein. Bis auf die x,y variablen vllt.
x und y ist beim enterklick 0, bei button was mit 36 25 oder so.
Hier ist zur Sicherheit mal die Button_click():
protected void Button1_Click(object sender, EventArgs e)
{
Session.Add("searchtext", TextBox1.Text);
string query;
//alle wörter die einen fehler in der sql abfrage erzeugen würden, werden hier aussortiert
query = removeNoise(TextBox1.Text);
//bilden eines leeren Tables, in den die suchergebnisse eingefügt werden können.
DataTable endresult = Create_Resulttable();
if (query.Length < 3)
{
TextBox1.Text = "Minimum 3 Zeichen";
}
else
{
SaveSearchStatistic();
// Starten der Abfrage
//Zuerst wird auf || und | geprüft
endresult = OR_Verknüpfung(query);
//Kontrolle ob der User die Rechte besitzt, die einzelnen Ergebnisse zu sehen
// Rolle < 2 = mind. Auditor
// User und Editor werden überprüft
if ((int) Session["role"] < 2)
{
DataTable tmp = endresult.Clone();
//tmp table enthält nur die erlaubten probleme
foreach (DataRow row in endresult.Rows)
{
string frei = checkBerechtigungenProblem(row["Problem_ID"].ToString());
if (frei == "frei")
{
//arbeiten mit tmp table und import row, da löschen zu fehler führte.
tmp.ImportRow(row);
}
}
endresult = tmp;
}
dataset.Tables.Add(endresult);
if (dataset.Tables["T_Problem_Details"].Rows.Count == 0)
{
string searchid = "2";
Response.Redirect("result.aspx?search=" + searchid);
}
else
{
Session.Add("results", endresult);
string searchid = "3";
Response.Redirect("result.aspx?search=" + searchid);
}
}
}
Hat es vllt doch noch irgend etwas mit der javascript funktion zutun?
Ich habe einmal versucht mein leeres <script> tag mit language oder typ zu bezeichnen, danach wurde die button_click funktion nicht mehr erreicht?!
Das verhalten ist sowieso etwas komisch, wenn ich erst einmal über button suche, und danach in die textbox gehe und enter klicke passiert nichts.
Nur beim ersten suchen über den enter button geht es sicher.
Wenn ich danach wieder in die textbox klicke und einfach nur enter drücke (wert ist noch im textfeld) passiert nichts. wenn ich den text ändere und dann enter klicke passiert nichts beim ersten mal. Wenn ich dann wieder in die box klicke und nur enter klicke geht es wieder, manchmal aber auch erst beim 3. mal. Wird der Text nicht geändert geht es gar nicht beim 2, 3, 4... Enter klick.
???
So, habe versucht meinen Test soweit es geht zu beschreiben.
Ich hoffe es waren genug wichtige Informationen dabei.
Wann setzt Du denn eigentlich:
Textbox1.Attributes.Add("onkeydown", submitOnEnter('" +Button1.ClientID + "');");
Wenn bei jedem ENTER die Button1_Click Methode angesprochen wird,
dann hat JavaScript alles richtig gemacht.
Jörg