Lukas.: Entertaste mit JS Funktion belegen?

Hallo,

ich habe eine Anwendung, bei der der User eigentlich von Inputfield zu Inputfield hüpfen soll. Über das jeweilige onchange-event werden hierbei Änderungen vorgenommen.

Jetzt stelle ich aber fest, dass der User jede Änderung innerhalb eines Inputfeldes mit der Entertaste bestätigt. Das führt zwar zur selben Änderung (inhaltlich gesehen), aber anstelle eines Ajaxaufrufes wird die komplette Seite neu geladen, was dazu führt, daß die Änderung mehr Zeit in Anspruch nimmt.

Kann ich das irgendwie ausmerzen? Also quasi die Entertaste mit derselben JS-Funktion belegen wie das onchange-Event?

Lukas

  1. Tach!

    Kann ich das irgendwie ausmerzen? Also quasi die Entertaste mit derselben JS-Funktion belegen wie das onchange-Event?

    Es gibt Key-Events, keypress, keydown, keyup. Das Event mit eventvariable.preventDefault() abbrechen und dann die Funktion aufrufen, die beim change aufgerufen wird.

    dedlfix.

    1. Hi dedlfix,

      Es gibt Key-Events, keypress, keydown, keyup. Das Event mit eventvariable.preventDefault() abbrechen und dann die Funktion aufrufen, die beim change aufgerufen wird.

      Ich habe jetzt einen Jquery Code gefunden, der mir gefällt:

          $(\"#meine_form input[name=eingabe]\").keyup(function(e) {
          //alert(e.keyCode);
          if(e.keyCode == 13) {
          alert('Enter key was pressed.');
           }
           });
      

      Das Einzige, was ungünstig ist: Ich kann das DIV "meine_form" nicht doppelt belegen. Mein bisheriger .change(function) - Code läuft alleine gut und der neue läuft alleine gut.

      Zusammen laufen sie aber nicht. Da läuft ausschließlich der .change(function) - Code und der .keyup(function(e) - Code wird ignoriert.

      Lukas

      1. Das Einzige, was ungünstig ist: Ich kann das DIV "meine_form" nicht doppelt belegen.

        Nicht doppelt belegen? Dein Wissen hier steht in einigem Kontrast zu Deinem Wissen über Endnutzer :) Du kannst schon mehrere Listener auf Deiner Form erstellen. Alles andere wäre ja auch schrecklich, oder? Du machst wahrscheindlich irgendwo einen Fehler.

        Wenn Du die Form nur per Javscript evaluierst, würde ich generell das Absenden deaktivieren.

        Cheers,

        BaBa

        --
        BaBa kommt von Basketball
  2. Hallo,

    Jetzt stelle ich aber fest, dass der User jede Änderung innerhalb eines Inputfeldes mit der Entertaste bestätigt. Das führt zwar zur selben Änderung (inhaltlich gesehen), aber anstelle eines Ajaxaufrufes wird die komplette Seite neu geladen,

    Das ist das normale Verhalten. Abgesehen davon, dass Du die Keyevents abfangen kannst würde ich das auch immer erwarten und daher nicht Enter drücken würde, wenn ich mich in einem Input (type=text) befinde. Ich würde Tab drücken, um zwischen den Inputfeldern zu navigierern.

    Kann ich das irgendwie ausmerzen?

    Die Antwort also: ja, aber evtl. wissen das die User nicht.

    Cheers,

    BaBa

    --
    BaBa kommt von Basketball
  3. ich habe eine Anwendung, bei der der User eigentlich von Inputfield zu Inputfield hüpfen soll. Über das jeweilige onchange-event werden hierbei Änderungen vorgenommen.

    Jetzt stelle ich aber fest, dass der User jede Änderung innerhalb eines Inputfeldes mit der Entertaste bestätigt.

    Wer ist „der User“? Ein einzelner?

    Der User (im allgemeinen) sollte daran gewöhnt sein, dass zum „Hüpfen“ die Tab-Taste da ist und bei Enter das Formular abgeschickt wird. So verhalten sich Formulare auf Webseiten; und es wäre wohl unsinnig eins zu bauen, das sich anders verhält.

    LLAP

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
    1. Hi,

      Wer ist „der User“? Ein einzelner?

      Mein(e) Testuser(in), der/die sich aber so verhält, wie ich es auch von meinen "echten Usern" erwarte.

      Der User (im allgemeinen) sollte daran gewöhnt sein, dass zum „Hüpfen“ die Tab-Taste da ist und bei Enter das Formular abgeschickt wird. So verhalten sich Formulare auf Webseiten; und es wäre wohl unsinnig eins zu bauen, das sich anders verhält.

      Tab-Taste bedient mein .change Event vorzüglich, das ist nicht die Frage.

      Aber das "der User" im allgemeinen daran gewöhnt ist, daß die Tab-Taste zum Navigieren in Formularen benutzt wird, ist wirklich Unsinn. Hast Du viel mit Usern (also wirklichen Endverbrauchern) zu tun? Dann würdest Du sowas wirklich nicht behaupten.

      Lukas

      1. Hallo

        Der User (im allgemeinen) sollte daran gewöhnt sein, dass zum „Hüpfen“ die Tab-Taste da ist und bei Enter das Formular abgeschickt wird. So verhalten sich Formulare auf Webseiten; und es wäre wohl unsinnig eins zu bauen, das sich anders verhält.

        … das "der User" im allgemeinen daran gewöhnt ist, daß die Tab-Taste zum Navigieren in Formularen benutzt wird, ist wirklich Unsinn. Hast Du viel mit Usern (also wirklichen Endverbrauchern) zu tun? Dann würdest Du sowas wirklich nicht behaupten.

        Das ist nach meiner Erfahrung kein Unsinn. Ich kenne niemanden, der das anders erwarten und machen würde. Das ist nämlich nicht die Erfindung irgendwelcher Browser, sondern das Standardverhalten der Betriebssysteme, das von den Browsern genutzt wird.

        Tschö, Auge

        --
        Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war. Terry Pratchett, “Wachen! Wachen!
        1. Moin,

          Das ist nach meiner Erfahrung kein Unsinn. Ich kenne niemanden, der das anders erwarten und machen würde. Das ist nämlich nicht die Erfindung irgendwelcher Browser, sondern das Standardverhalten der Betriebssysteme, das von den Browsern genutzt wird.

          Ihr seid eindeutig zuviel mit "eures Gleichen" unterwegs.

          Geht mal raus zum Enduser, dann ändert Ihr Eure Meinung ;)

          Lukas

          1. Tach!

            Das ist nach meiner Erfahrung kein Unsinn. Ich kenne niemanden, der das anders erwarten und machen würde. Das ist nämlich nicht die Erfindung irgendwelcher Browser, sondern das Standardverhalten der Betriebssysteme, das von den Browsern genutzt wird.

            Ihr seid eindeutig zuviel mit "eures Gleichen" unterwegs.
            Geht mal raus zum Enduser, dann ändert Ihr Eure Meinung ;)

            Ich kann mich noch gut erinnern, dass man die Entertaste zum Weiterschalten ins nächste Eingabefeld verwenden musste. Das war in Benutzeroberflächen der Fall, bevor Windows seinen Siegeszug antrat. Es gibt bestimmt noch ein paar Programme, die es damals auch schon gab und die sich nie umgestellt haben, nicht mal mit ihrer Portierung auf Windows. Die haben dann genau dasselbe machen müssen wie du: vorgegebene Tastatur-Funktionen umbiegen.

            dedlfix.

            1. Hi dedlfix,

              Ich kann mich noch gut erinnern, dass man die Entertaste zum Weiterschalten ins nächste Eingabefeld verwenden musste. Das war in Benutzeroberflächen der Fall, bevor Windows seinen Siegeszug antrat. Es gibt bestimmt noch ein paar Programme, die es damals auch schon gab und die sich nie umgestellt haben, nicht mal mit ihrer Portierung auf Windows.

              Jups.

              Die haben dann genau dasselbe machen müssen wie du: vorgegebene Tastatur-Funktionen umbiegen. dedlfix.

              Genau das will ich machen. Ich habe jetzt ein DIV generiert, innerhalb dessen ich aus der Entertaste quasi eine TAB-Taste machen will.

                  $('#neues_div').keypress( function(event) {
                  
                  if (event.keyCode == 10 || event.keyCode == 13) {
                      event.preventDefault();
              		
              		//alert('Enter gedrückt');
                      }
                  });
              

              Was mir noch nicht gelingen will, ist, den TAB pressdown zu simulieren.

              Lukas

              1. Tach!

                Was mir noch nicht gelingen will, ist, den TAB pressdown zu simulieren.

                Muss man nicht. Ruf einfach die Handler-Funktion auf, die sonst bei Tab/Change aufgerufen würde.

                dedlfix.

                1. Hi dedlfix,

                  Muss man nicht. Ruf einfach die Handler-Funktion auf, die sonst bei Tab/Change aufgerufen würde.

                  Jau, hab ich mir auch gedacht...

                      if (event.keyCode == 10 || event.keyCode == 13) {
                          event.preventDefault();
                      $("#meine_form input[name=eingabe]").change();	
                          }
                  

                  hat dann hier eine Kettenreaktion generiert, in der sich alle Felder wie in einem Dominoeffekt kettenartig nacheinander verändert haben... Normalerweise übergebe ich zum change-event aber auch die ID des Inputfeldes.

                  Lukas

                  1. Tach!

                    Muss man nicht. Ruf einfach die Handler-Funktion auf, die sonst bei Tab/Change aufgerufen würde.

                        $("#meine_form input[name=eingabe]").change();	
                    

                    Das ist nicht der Event-Handler. Damit löst du das Event aus. Du übergibst doch aber irgendwo eine Funktion an eine JQuery-Funktion. Die musst du aufrufen. Wenn du die direkt notiert hast, schreib sie separat und übergib nur die Referenz. Dann kannst du sie auch von anderwo aus aufrufen.

                    dedlfix.

                    1. Hi dedlfix,

                      Du übergibst doch aber irgendwo eine Funktion an eine JQuery-Funktion. Die musst du aufrufen. Wenn du die direkt notiert hast, schreib sie separat und übergib nur die Referenz. Dann kannst du sie auch von anderwo aus aufrufen.

                      Ok. Müsste ich erklärt bekommen. Ich habe das bisher so gelöst:

                           $("#meine_form input[name=eingabe]").change(function() {
                           var id = this.id;
                           // alert(id);
                           var wert = jQuery(this).val();
                           $.post(\"php_file.php\", { 
                           usw....
                                });
                      	 return false;
                           });
                      
                      

                      Ich weiß schon, worauf Du hinaus willst (glaub ich). Würde ich die change-funktion hier ausgliedern können, könnte ich sie anschließend sowohl bei Change oder auch tab aufrufen, als auch per Enter.

                      Ich weiß aber nicht, wie ich den Code in eine Funktion packe, wo die Funktion dann stehen muß und wie ich sie aufrufe.

                      Lukas

                      1. Tach!

                        Ich weiß aber nicht, wie ich den Code in eine Funktion packe, wo die Funktion dann stehen muß und wie ich sie aufrufe.

                        var name = function(parameter) {
                          body;
                        }
                        

                        oder

                        function name(parameter) {
                          body;
                        }
                        

                        Soweit so klar. In beiden Fällen kannst du eine Referenz auf die Funktion über name bekommen. Der Unterschied ist nur, dass im ersten Fall die Code-Ausführung an der Anweisung vorbeikommen muss. Im zweiten Fall muss die Funktion nur irgendwo stehen. Das kann auch hinter einem return sein. Das gilt vor allem dann, wenn die Funktion innerhalb einer anderen Funktion notiert ist.

                        Referenz übergeben:

                        andere_function(name);
                        

                        Function ausführen:

                        name(wert);
                        

                        dedlfix.

                        1. Hi dedlfix,

                          danke für Deine Hilfe.

                          Jetzt funktioniert alles wie gewünscht.

                          Ich habe es so gemacht, wie Du beschrieben hast, ist ja eigentlich analog zu php. Sowohl beim change-event als auch beim Enter-drücken kann ich bereits im Eventhandler id und wert ermitteln und diese dann als Parameter in die ausgegliederte Funktion übergeben.

                          Funktioniert bestens, danke.

                          Lukas

                          1. Hi,

                            Jetzt funktioniert alles wie gewünscht.

                            Eine kleine Sache noch:

                            Wenn ich die Funktion per Entertaste aufrufe, wird dennoch nach dem Wechsel aus dem Inputfeld in ein anderes (logischerweise) die Funktion über das change-Event ausgelöst. Das müßte nunj ja aber nicht mehr sein...

                            Wie verhindere ich das am besten (allerdings nur für diesen entsprechenden Durchgang...). Meine erste Idee (ich hoffe, das geht effektiver) ist, id und wert über local.storage speichern und auslesen, um zu kontrollieren, ob die Funktion bereits ausgelöst wurde (in diesem Durchgang) oder nicht.

                            Lukas

                            1. Wenn ich die Funktion per Entertaste aufrufe, wird dennoch nach dem Wechsel aus dem Inputfeld in ein anderes (logischerweise) die Funktion über das change-Event ausgelöst. Das müßte nunj ja aber nicht mehr sein...

                              Sag ich doch.

                              BaBa

                              --
                              BaBa kommt von Basketball
                              1. Hi baba,

                                Sag ich doch.

                                ... müsstest Du mir erklären. So denke ich, Du antwortest an meiner Frage vorbei. Wenn ich nur die Enterfunktion deaktiviere, passiert doch schlicht "nix" beim "entern.

                                Lukas

                                1. Tach!

                                  Sag ich doch.

                                  ... müsstest Du mir erklären. So denke ich, Du antwortest an meiner Frage vorbei. Wenn ich nur die Enterfunktion deaktiviere, passiert doch schlicht "nix" beim "entern.

                                  Das ist Grundlagenwissen zum Javascript-Eventhandling. Die Eventhandler werden aufgerufen und anschließend geht das Event weiter zum Browser, der dann das macht, was er immer bei diesem Event macht. Das kann man nur unterdrücken, indem man vom Event-Objekt die preventDefault-Methode aufruft. Das kann an einer beliebigen Stelle im Eventhandler stehen und davor oder danach dein Code, der bei dem Event ablaufen soll.

                                  dedlfix.

                                  1. Hm,

                                    Das ist Grundlagenwissen zum Javascript-Eventhandling. Die Eventhandler werden aufgerufen und anschließend geht das Event weiter zum Browser, der dann das macht, was er immer bei diesem Event macht. Das kann man nur unterdrücken, indem man vom Event-Objekt die preventDefault-Methode aufruft. Das kann an einer beliebigen Stelle im Eventhandler stehen und davor oder danach dein Code, der bei dem Event ablaufen soll.

                                    ... dann reden wir grad aneinander vorbei...

                                    ich habe 2 Funktionen:

                                    // Change 
                                        $(\"#meine_for imnput[name=eingabe]\").change(function() {
                                        var id = this.id;
                                        // alert(id);
                                        var wert = jQuery(this).val();
                                        neue_funktion(id,wert); 
                                        return false;
                                        });
                                    
                                    // Enter
                                        $(\"#meine_form input[name=eingabe]\").keypress( function(event) {
                                        if (event.keyCode == 13) {
                                        event.preventDefault();
                                        var id = this.id;
                                        // alert(id);
                                        var wert = jQuery(this).val();
                                        neue_funktion(id,wert); 
                                        return false;
                                        });
                                    

                                    Wenn die Enter bedient wird, bleibt doch die Change noch "aktiv"??

                                    Lukas

                                    1. Tach!

                                      ... dann reden wir grad aneinander vorbei...

                                      Gut möglich. Dann erzähl nochmal genau, was gerade passiert und was stattdessen passieren soll.

                                      ich habe 2 Funktionen:

                                      Du brauchst kein return false, wenn du event.preventDefault() verwendest.

                                      Wenn die Enter bedient wird, bleibt doch die Change noch "aktiv"??

                                      Wenn beim Entern schon onchange aufgerufen wird (muss ja, wenn der Wert sich ändert), muss nur noch die Entertaste deaktiviert werden und der Focus ins nächste Feld gesetzt werden.

                                      dedlfix.

                                      1. Hallo dedlfix,

                                        Gut möglich. Dann erzähl nochmal genau, was gerade passiert und was stattdessen passieren soll.

                                        Wenn beim Entern schon onchange aufgerufen wird (muss ja, wenn der Wert sich ändert), muss nur noch die Entertaste deaktiviert werden und der Focus ins nächste Feld gesetzt werden.

                                        Wird ja nicht. (change aufgerufen) Im Übrigen, das war ja meine erste Idee. Alles beim alten lassen und stattdessen die Funktion der Entertaste unterdrücken und durch ein Simmulieren des Drucks auf die Tab-Taste zu ersetzen. Habe ich Abstand von genommen, als Du sagstest, ich bräuchte nur beide Events dieselbe Funktkion ausführen lassen. Und so (denke ich) habe ich das auch umgesetzt.

                                        Im Genauen:

                                        Ich habe eine Funktion "mache_dies_und_das()", die sowohl beim drücken der Entertaste als auch beim change-Event ausgeführt wird.

                                        Soll heißen, wenn jemand einen change-event macht, läuft alles sauber ab (ich nenne das jetzt mal "Durchlauf"). Dieser Durchlauf läuft dann also sauber ab und das Formular wartet auf neuerliche Eingabe, die durch change oder Enter (oder Tab) beendet wird.

                                        Das andere Szenario ist, daß der User den Durchlauf per Enter beendet. Dann wird zwar ebenfalls die "mache_dies_und_das()"-Funktion bedient, aber der change-Handler beibt sozusagen noch "aktiv". Soll heißen, ich bräuchte z.b. nun noch eine Abfrage, ob der Enter-Event (für die aktuelle id und den aktuellen Wert) bereits ausgeführt wurde. Falls ja, soll er nicht nochmal ausgeführt werden.

                                        Pseudocode:

                                        function mache_dies_und_das(id,wert) {
                                        // macht dies und das
                                        if (mache_dies_und_das_schon_durch_enter_ausgefuehrt(id,wert) == 1) {
                                        return;
                                        }
                                        mache_dies_und_das_schon_durch_enter_ausgefuehrt(id,wert) = 0;
                                        // weiter gehts...
                                        }
                                        

                                        Und da komme ich mit dem Gültigkeitsbereich von Variablen durcheinander. Deshalb meine Idee mit local.storage...

                                        Lukas

                                        1. Tach!

                                          Wenn beim Entern schon onchange aufgerufen wird (muss ja, wenn der Wert sich ändert), muss nur noch die Entertaste deaktiviert werden und der Focus ins nächste Feld gesetzt werden.

                                          Wird ja nicht. (change aufgerufen) Im Übrigen, das war ja meine erste Idee. Alles beim alten lassen und stattdessen die Funktion der Entertaste unterdrücken und durch ein Simmulieren des Drucks auf die Tab-Taste zu ersetzen. Habe ich Abstand von genommen, als Du sagstest, ich bräuchte nur beide Events dieselbe Funktkion ausführen lassen. Und so (denke ich) habe ich das auch umgesetzt.

                                          Es kommt durchaus vor, dass ich mich irre. Ich sehe ja dein Projekt nicht vollständig und kann dir mitunter nur à la Trockenschwimmen antworten. Du musst alle Antworten überprüfen und dich nicht scheuen, mir zu sagen, wenn was nicht wie beschrieben geht.

                                          Wir probieren es mal anders. Onchange tritt auf, wenn du das Eingabefeld verlässt. Das geht normalerweise mit Tab. Wenn du hingegen bei der Enter-Taste den Focus auf ein anderes Feld setzt (und ansonsten nichts weiter machst, außer preventDefault), müsste doch auch onchange gefeuert werden, weil du ja das Feld verlässt, zumindest wenn Änderungen drin sind. Wenn es generell gefeuert werden soll, wäre wohl onblur besser.

                                          Und da komme ich mit dem Gültigkeitsbereich von Variablen durcheinander. Deshalb meine Idee mit local.storage...

                                          Wenn es nicht dauerhaft abgelegt werden soll, dann sessionStorage. Aber vielleicht kommen wir ja ohne das aus.

                                          dedlfix.

                                          1. Hi dedlfix,

                                            Es kommt durchaus vor, dass ich mich irre. Ich sehe ja dein Projekt nicht vollständig und kann dir mitunter nur à la Trockenschwimmen antworten. Du musst alle Antworten überprüfen und dich nicht scheuen, mir zu sagen, wenn was nicht wie beschrieben geht.

                                            Och, das mache ich schon, keine Sorge. Ich versuche nur, höflich zu sein, wenn mir schon geholfen wird. Außerdem irrst Du zu viel zu selten, da ist doppelte Kontrolle auf Fragerseite schonmal angebracht. ;)

                                            Wir probieren es mal anders. Onchange tritt auf, wenn du das Eingabefeld verlässt. Das geht normalerweise mit Tab. Wenn du hingegen bei der Enter-Taste den Focus auf ein anderes Feld setzt (und ansonsten nichts weiter machst, außer preventDefault), müsste doch auch onchange gefeuert werden, weil du ja das Feld verlässt, zumindest wenn Änderungen drin sind.

                                            Absolut korrekt. Nur - genau das mache ich ja derzeit nicht. Aber es entspricht meiner ursprüngliuchen Idee. Und es entspricht der Idee, die Entertaste per Script abzufangen und mit der Simmulation der Tab Taste zu ersetzen. Es müßte nichtmal die Tab-Taste sein, da es ausreicht, irgendeinem anderen Inputfeld des Formulars den focus() zu übergeben. Es müßte nicht zwingend der nächste sein. Man könnte sogar (ich spinne es mal weiter) den focus() unterm Strich im vom User gewählten Inputfeld belassen, wenn man nur vorher einmal kurz in ein anderes Feld "focussiert" und gleich zurück ins ursprüngliche Inputfeld "focussiert".

                                            Und da komme ich mit dem Gültigkeitsbereich von Variablen durcheinander. Deshalb meine Idee mit local.storage...

                                            Wenn es nicht dauerhaft abgelegt werden soll, dann sessionStorage. Aber vielleicht kommen wir ja ohne das aus.

                                            Wir kommen definitiv ohne Beides aus, wenn es gelingt, die Tabtaste zu simmulieren oder alternativ in ein beliebiges Inputfeld zu "focussieren" (beliebig != zufällig, es muß schon für den User einigermaßen nachvollziehbar bleiben). Und dann würde tatsächlich im Anschluß daran, wie baba und Du sagen, der "preventDefault" ausreichen.

                                            Lukas

                                            1. Tach!

                                              Wir probieren es mal anders. Onchange tritt auf, wenn du das Eingabefeld verlässt. Das geht normalerweise mit Tab. Wenn du hingegen bei der Enter-Taste den Focus auf ein anderes Feld setzt (und ansonsten nichts weiter machst, außer preventDefault), müsste doch auch onchange gefeuert werden, weil du ja das Feld verlässt, zumindest wenn Änderungen drin sind.

                                              Absolut korrekt. Nur - genau das mache ich ja derzeit nicht. Aber es entspricht meiner ursprüngliuchen Idee. Und es entspricht der Idee, die Entertaste per Script abzufangen und mit der Simmulation der Tab Taste zu ersetzen. Es müßte nichtmal die Tab-Taste sein, da es ausreicht, irgendeinem anderen Inputfeld des Formulars den focus() zu übergeben. Es müßte nicht zwingend der nächste sein. Man könnte sogar (ich spinne es mal weiter) den focus() unterm Strich im vom User gewählten Inputfeld belassen, wenn man nur vorher einmal kurz in ein anderes Feld "focussiert" und gleich zurück ins ursprüngliche Inputfeld "focussiert".

                                              Du wirst (meines Erachtens, genau weiß ich das nicht) keinen Tastendruck simulieren können, sonst könnte man ganz gehörigen Schindluder treiben. Du kannst auch nicht dem Event-Objekt den Key-Code ändern und das Event einfach durchreichen. Die entsprechenden Felder sind read-only. Da bleibt dir wohl nur übrig, das nächste Feld selbst zu fokussieren. Wenn es immer feststeht, von welchem Feld welches andere erreicht werden soll, dann schreib das Ziel in ein data-Attribut, beispielsweise data-next-field. Das fragst du im Eventhandler ab und setzt den Fokus auf das Feld mit der darin enthaltenen ID.

                                              dedlfix.

                                              1. Da bleibt dir wohl nur übrig, das nächste Feld selbst zu fokussieren. Wenn es immer feststeht, von welchem Feld welches andere erreicht werden soll, dann schreib das Ziel in ein data-Attribut, beispielsweise data-next-field. Das fragst du im Eventhandler ab und setzt den Fokus auf das Feld mit der darin enthaltenen ID.

                                                Hi dedlfix,

                                                ok. Daran arbeite ich gerade. Sollte ich aber hinbekommen...

                                                Danke, Lukas

                                                1. Hi dedlfix,

                                                  ok. Daran arbeite ich gerade. Sollte ich aber hinbekommen...

                                                  Ich bekomme mein data Attribut nicht ausgelesen.

                                                  HTML:

                                                  
                                                  	<TD align=right>
                                                  	<INPUT TYPE=TEXT name="eingabe" id="l_42_4383" data-next="r_42_4383" VALUE="">
                                                  	</TD>
                                                  
                                                  	<TD align=right>
                                                  	<INPUT TYPE=TEXT name="eingabe" id="r_42_4383" data-next="e_42_4383" VALUE="">
                                                  	</TD>
                                                  

                                                  Wenn ich nun mit

                                                  	var next = $('#meine_form input[name=eingabe]').data('next');
                                                  	alert(next);
                                                  
                                                  

                                                  auslese, erhalte ich immer den ersten Wert, egal in welcher Zeile meiner Tabelle ich mich befinde.

                                                  Und

                                                  	var next = this.data('next');
                                                  	alert(next);
                                                  
                                                  bzw.
                                                  
                                                  	var next = this.data-next;
                                                  	alert(next);
                                                  

                                                  liefert mir nichts bzw. NaN.

                                                  Wie lese ich also mein data-next der jeweiligen id aus?

                                                  Lukas

                                                  1. Moin!

                                                    Wie lese ich also mein data-next der jeweiligen id aus?

                                                    So:

                                                    <!doctype html>
                                                    <html>
                                                      <head>
                                                        <title>Test</title>
                                                        <script>
                                                    	$(document).ready(function () {
                                                    	    alert(document.getElementById('idValue').getAttribute("data-next"));
                                                    	});
                                                        </script>
                                                      </head>
                                                      <body>
                                                        <form>
                                                          <INPUT TYPE=TEXT name="eingabe" id="idValue" data-next="dataNextValue" value="valeValue">
                                                        </form>
                                                      </body>
                                                    </html>
                                                    
                                                    

                                                    Jörg Reinholz

                                                    1. @@Jörg Reinholz

                                                      So: $(document).ready(function () { alert(document.getElementById('idValue').getAttribute("data-next")); });

                                                      Nein, so nicht.

                                                      Entweder man verwendet jQuery oder man verwendet es nicht. Aber wenn man es verwendet, hat weder getElementById() noch getAttribute() was im Code zu suchen. Das sollte dann als $('#idValue').attr('data-next') bzw. noch besser (wie Baba schon sagte) als $('#idValue').data('next') notiert werden.

                                                      LLAP

                                                      --
                                                      „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
                                                      1. Moin!

                                                        Entweder man verwendet jQuery oder man verwendet es nicht.

                                                        Damit hast Du natürlich recht.

                                                        Jörg Reinholz

                                                  2. 	var next = $('#meine_form input[name=eingabe]').data('next');
                                                    	alert(next);
                                                    
                                                    

                                                    Es gibt eben mehrere inputs mit Namen "eingabe". jQuery nimmt dann anscheinend immer den ersten. Selektiere doch direkt über die Id, dann hat sichs.

                                                    var next = $('#'+next).data('next');
                                                    

                                                    Cheers,
                                                    BaBa

                                                    --
                                                    BaBa kommt von Basketball
                                                    1. Hi baba,

                                                      Es gibt eben mehrere inputs mit Namen "eingabe". jQuery nimmt dann anscheinend immer den ersten. Selektiere doch direkt über die Id, dann hat sichs.

                                                      var next = $('#'+next).data('next');
                                                      

                                                      Danke. so gehts. Komisch, ich dachte, auch das ausprobiert zu haben..na egal.

                                                      Was aber jetzt wieder seltsam ist: Ich dachte, ich könnte dann den focus analog setzen:

                                                      var next = $('#'+id).data('next');
                                                      //alert(next);	 // gibt die nächste id aus und zwar korrekt
                                                      $('#'+next).focus();
                                                      

                                                      Der focus bleibt aber im vorherigen Inputfeld.

                                                      Lukas

          2. Hallo

            Das ist nach meiner Erfahrung kein Unsinn. Ich kenne niemanden, der das anders erwarten und machen würde. Das ist nämlich nicht die Erfindung irgendwelcher Browser, sondern das Standardverhalten der Betriebssysteme, das von den Browsern genutzt wird.

            Ihr seid eindeutig zuviel mit "eures Gleichen" unterwegs.

            Ganz gewiss nicht.

            Geht mal raus zum Enduser, dann ändert Ihr Eure Meinung ;)

            Ich arbeite jeden Tag am Entwurf bzw. der Veränderung von Formularen in Access, mit denen etwa 40 Benutzer unterschiedlicher (meist niedriger) Affinität zu PC-Interna arbeiten. Sei dir gewiss, dass ich weiß, wie die Kolleginnen und Kollegen arbeiten. Meinesgleichen ist da keiner. Das durchschalten der manchmal bis zu etwa 20 Eingabefelder in einem Formular aber macht hier jeder, der mit der Tastatur navigiert, mit der Tab-Taste.

            Tschö, Auge

            --
            Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war. Terry Pratchett, “Wachen! Wachen!
            1. n'Abend,

              Das durchschalten der manchmal bis zu etwa 20 Eingabefelder in einem Formular aber macht hier jeder, der mit der Tastatur navigiert, mit der Tab-Taste.

              ja, ist auch meine Beobachtung - aber der eingeschobene Relativsatz ist sehr wichtig. Denn tatsächlich scheinen viele weniger technik-affine Nutzer die Funktion der Tab-Taste nicht wirklich zu kennen. Ich beobachte nämlich sehr oft, dass Leute ein Feld ausfüllen, dann wieder zur Maus greifen, das nächste Feld anklicken, die Hände wieder zur Tastatur, Text eingeben, mit der Maus das nächste Feld selektieren, usw. ...

              Nur jemanden, der die Enter-Taste zum Weiterschalten benutzen möchte, habe ich noch nicht bewusst erlebt.

              Ciao,
               Martin

              1. Hi,

                Das durchschalten der manchmal bis zu etwa 20 Eingabefelder in einem Formular aber macht hier jeder, der mit der Tastatur navigiert, mit der Tab-Taste.

                ...

                ja, ist auch meine Beobachtung - aber der eingeschobene Relativsatz ist sehr wichtig.

                Otto Normalo navigiert, schaltet durch, isst, trinkt, schläft, ... mit einer Hand auf der Maus.

                Denn tatsächlich scheinen viele weniger technik-affine Nutzer die Funktion der Tab-Taste nicht wirklich zu kennen. Ich beobachte nämlich sehr oft, dass Leute ein Feld ausfüllen, dann wieder zur Maus greifen, das nächste Feld anklicken, die Hände wieder zur Tastatur, Text eingeben, mit der Maus das nächste Feld selektieren, usw. ...

                Ganz genau so läuft das "da draußen"...

                Nur jemanden, der die Enter-Taste zum Weiterschalten benutzen möchte, habe ich noch nicht bewusst erlebt.

                Ok, diese Einschränkung kann ich nachvollziehen. In diesem Fall liegt das sicherlich daran, daß das Formular nicht ganz als solches wahrgenommen wird. Bei Veränderung eines Feldes ziehen weitere Felder nach. Gemäß Rücksprache mit der Testperson wollte sie durch das Klicken der Entertaste sozusagen die Eingabe eines Inputfeldes bestätigen, um hiermit die anderen Felder zu verändern.

                Und da alle anderen Felder ebenfalls mit Werten bestückt sind, hat sie auch keine Veranlassung gesehen, den Focus auf ein anderes Inputfeld zu setzen.

                Daher eben die Entertaste. Und das halte ich tatsächlich für stellvertretend, was meine User angeht.

                Lukas

      2. Tab-Taste bedient mein .change Event vorzüglich, das ist nicht die Frage.

        Dann besteht doch sowieso kein Grund dazu, das onkey == "Enter" event mit der onchange-Funktion zu belegen. Einfach ein preventDefault für den Enterdruck und gut ist.

        Cheers,

        BaBa

        --
        BaBa kommt von Basketball
        1. Einfach ein preventDefault für den Enterdruck und gut ist.

          Nicht ganz.

          Denn dann passiert einfach gar nichts. preventDefault und anschließendes Ersetzen durch einen Tab-pressdown, das wär fein.

          Krieg ich aber noch nicht hin...

          Lukas