formularclick per script geht nicht immer

Bubblez

Mitglied
hallo zusammen,
ich habe zugegeben ein bischen ein merkwürdiges problem :D. im .net habe ich ja normalerweise ein formular über den ganzen bodybereich. wenn ich jetzt mehrere submitbuttons im formular habe, muss ich dem browser sagen, welcher submitbutton zu welchem formularbereich gehört. ich habe mir dafür JavaScript und das HTML-Element fieldset zur Hilfe genommen. hier mein c#-code im Page_Load um das script einzubinden:

Code:
        String script3 = "";
        script3 += "<script type='text/javascript'>" +
                  "var element3 = document.getElementById('" + btnSearchGeraet.ClientID + "');" +
                  "var fieldset = document.getElementById('frmSearch');" +
                  "function doSearchNow_extended(ev){" +
                  "if(!ev) ev = window.event; " +
                  "if(ev.keyCode == 13  && element3 != null){" +
                  "element3.click(); }} fieldset.onkeydown = doSearchNow_extended; // --></script>";

        if (!Page.IsStartupScriptRegistered("search_extended"))
            Page.RegisterStartupScript("search_extended", script3);

ich suche mir also das fieldset und setze ein onkeydown event-handler. in der funktion selbst führe ich den click auf mein submitbutton per javascript aus, wenn ich enter gedrückt habe innerhalb meines fieldsets. das script ist für den FF verständlich, auch der IE versteht es, aber nur unter der bedingung, dass ich nach dem "element3.click(); und vor }} ein alert(''); einbaue. also: "element3.click(); alert(''); }} fieldset.onkeydown = doSearchNow_extended; //

wenn ich das nicht mache, dann ruft der browser ohne mein element3.click(); zu beachten den standart-submitbutton auf. nun ich frage mich, weshalb ist das so und wie kann ich es machen, dass der IE das auch versteht ...
ich probierte es auch schon mit dem eventhandler onkeypress , ohne erfolg ...
 
ich möchte, wie ja aus dem code herauszulesen ist, mit der taste enter mein submitbutton ansprechen. das ist nunmal effizienter als mit der maus den button anvisieren und clicken ...
der standartsubmitbutton ist der erste innerhalb des formulars, soweit ich das bis jetzt gesehen habe.

im forum hab ich mich etwas geirrt. bitte thread verschieben.
 
Zuletzt bearbeitet:
nun ich habe die lösung gefunden. wie es scheint ist der rückgabewert einer alertbox immer false. d.h. also wenn ich im onclick-event innerhalb des formulars im DOM-elementbaum ein false zurückgebe, dann führt er irgendwie denn standart event nicht aus.
normalerweise ist es ja so:
Die Standard-Reaktion des HTML-Elements erfolgt immer erst, nachdem der Event seinen Weg durch die Elementhierarchie beendet hat. Ein Event kommt also zwar im Internet Explorer zuerst beim Ziel-Element an und blubbert dann bis zum document hoch, aber erst danach löst er die Standard-Reaktion des Ziels aus.
quelle:http://www.javascript-workshop.de/buch/11.html

die standartreaktion ist in meinem falle ja der submit-event des ersten submitbuttons. denn solange ich nicht "ok" gedrückt habe, war in der adresszeile die korrekte zielURL eingetragen :p

nun meine komplette lösung:
Code:
        /// <summary>
        ///     This ties a formarea to a control. that means, when you press enter in this area, the script fires the controlToClick.click() event
        /// </summary>
        /// <param name="formAreaClientID">
        ///     This is the area in the form, to which the key-eventhandler is bound to
        /// </param>
        /// <param name="controlToClick">
        ///     this controls click() will be fired
        /// </param>
        /// <param name="page" >
        ///     Page-object that contains the form-control
        /// </param>
        /// <param name="scriptName">
        ///     UNIQUE functionname and .net intern registered-scriptname
        /// </param>
        public static void BindControlToClick(string formAreaClientID, Control controlToClick, string scriptName, Page page)
        {
            /* formular bereiche auf einen bestimmtes control binden, d.h. den click ausführen */
            String script2 = "";
            script2 += "<script type='text/javascript'>" +
                      "function "+scriptName+"(ev){" +
                      "var clickarea = document.getElementById('" + controlToClick.ClientID + "');" +
                      "if(!ev) ev = window.event; " +
                      "if(ev.keyCode == 13 && clickarea != null){" +
                      "clickarea.click(); return false; }} "+
                      "document.getElementById('" + formAreaClientID + "').onkeydown = "+scriptName+"; // --></script>";

            if (!page.IsStartupScriptRegistered(scriptName))
                page.RegisterStartupScript(scriptName, script2);       
        }

BindControlToClick(txtIMTNummer.ClientID, btnGoImtNummer, "search_imtnummer", Page);
Wichtig: sowie ich das getestet habe, ist es wichtig onkeydown und NICHT onkeypress zu nehmen. mehr infos dazu auch auf der oben zitierten page...
wenn ihr noch ergänzungen oder fragen habt, bin ich offen. vor allem was die crossbrowser fähigkeit angeht ...
 
Zuletzt bearbeitet:
Zurück