Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
TextBox Enter
Chris06
myCSharp.de - Member



Dabei seit:
Beiträge: 130

Themenstarter:

TextBox Enter

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
joerg.uth
myCSharp.de - Member

Avatar #avatar-2080.jpg


Dabei seit:
Beiträge: 484
Herkunft: Lonnig

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Chris06
myCSharp.de - Member



Dabei seit:
Beiträge: 130

Themenstarter:

beantworten | zitieren | melden

da passiert trotzdem nix
private Nachricht | Beiträge des Benutzers
joerg.uth
myCSharp.de - Member

Avatar #avatar-2080.jpg


Dabei seit:
Beiträge: 484
Herkunft: Lonnig

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
.Kai
myCSharp.de - Member

Avatar #avatar-1836.gif


Dabei seit:
Beiträge: 1.130

beantworten | zitieren | melden

Hallo Chris06,

http://dotnet-snippets.de/dns/submitbyenter-SID40.aspx

HTH
private Nachricht | Beiträge des Benutzers
joerg.uth
myCSharp.de - Member

Avatar #avatar-2080.jpg


Dabei seit:
Beiträge: 484
Herkunft: Lonnig

beantworten | zitieren | melden

@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.
private Nachricht | Beiträge des Benutzers
Chris06
myCSharp.de - Member



Dabei seit:
Beiträge: 130

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
joerg.uth
myCSharp.de - Member

Avatar #avatar-2080.jpg


Dabei seit:
Beiträge: 484
Herkunft: Lonnig

beantworten | zitieren | melden

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

Jörg
private Nachricht | Beiträge des Benutzers
joerg.uth
myCSharp.de - Member

Avatar #avatar-2080.jpg


Dabei seit:
Beiträge: 484
Herkunft: Lonnig

beantworten | zitieren | melden

Ä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
private Nachricht | Beiträge des Benutzers
Cord Worthmann
myCSharp.de - Member



Dabei seit:
Beiträge: 1.207

beantworten | zitieren | melden


<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
private Nachricht | Beiträge des Benutzers
joerg.uth
myCSharp.de - Member

Avatar #avatar-2080.jpg


Dabei seit:
Beiträge: 484
Herkunft: Lonnig

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Cord Worthmann
myCSharp.de - Member



Dabei seit:
Beiträge: 1.207

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Chris06
myCSharp.de - Member



Dabei seit:
Beiträge: 130

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
joerg.uth
myCSharp.de - Member

Avatar #avatar-2080.jpg


Dabei seit:
Beiträge: 484
Herkunft: Lonnig

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Chris06
myCSharp.de - Member



Dabei seit:
Beiträge: 130

Themenstarter:

beantworten | zitieren | melden

das setze ich in der Page.Load der Masterpage
private Nachricht | Beiträge des Benutzers