Laden...

TextBox Enter

Erstellt von Chris06 vor 17 Jahren Letzter Beitrag vor 17 Jahren 4.348 Views
C
Chris06 Themenstarter:in
130 Beiträge seit 2006
vor 17 Jahren
TextBox Enter

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?

484 Beiträge seit 2006
vor 17 Jahren

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

C
Chris06 Themenstarter:in
130 Beiträge seit 2006
vor 17 Jahren

da passiert trotzdem nix 🙁

484 Beiträge seit 2006
vor 17 Jahren
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

1.130 Beiträge seit 2005
vor 17 Jahren
484 Beiträge seit 2006
vor 17 Jahren

@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.

C
Chris06 Themenstarter:in
130 Beiträge seit 2006
vor 17 Jahren

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.

484 Beiträge seit 2006
vor 17 Jahren

Poste mal deinen erzeugten HTML-Source als Attachment(zip) ich habe da eine Vermutung 🙂

Jörg

484 Beiträge seit 2006
vor 17 Jahren

Ä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

C
1.215 Beiträge seit 2004
vor 17 Jahren

<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

484 Beiträge seit 2006
vor 17 Jahren

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

C
1.215 Beiträge seit 2004
vor 17 Jahren

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

C
Chris06 Themenstarter:in
130 Beiträge seit 2006
vor 17 Jahren

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.

484 Beiträge seit 2006
vor 17 Jahren

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

C
Chris06 Themenstarter:in
130 Beiträge seit 2006
vor 17 Jahren

das setze ich in der Page.Load der Masterpage