mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Sa 27.04.2024 00:16 Benutzername: Passwort: Auto-Login

Thema: onChange-Event ohne Inline-Javascript vom 03.12.2007


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> onChange-Event ohne Inline-Javascript
Autor Nachricht
sidisinsane
Threadersteller

Dabei seit: 30.01.2006
Ort: Hamburg
Alter: 52
Geschlecht: Männlich
Verfasst Mo 03.12.2007 13:41
Titel

onChange-Event ohne Inline-Javascript

Antworten mit Zitat Zum Seitenanfang

Ich habe eine Dropdown-Liste die bei Auswahl einer Option ein Formular sendet - in einem neuen Fenster. So schaut die bisher funktionierende Version aus:
Code:
<form id="search" name="search" action="search.php" method="post">
   <fieldset>
      <legend>Search Everything Anywhere</legend>
      <select name="options" id="options" onchange="this.form.target='_blank';this.form.submit();">
         <optgroup label="I">
            <option value="A">A</option>
            <option value="B">B</option>
         </optgroup>
         <optgroup label="II">
            <option value="A">A</option>
            <option value="B">B</option>
         </optgroup>
      </select>
      <noscript>
         <input type="submit" id="submitform" name="submitform" value="Search" />
      </noscript>
   </fieldset>
</form>


Nun möchte ich das Ganze jedoch ohne Inline-Javascript verwirklichen, sodas das der Select-Teil am Ende so ausschaut:
Code:
<select name="options" id="options">


Meine Versuche dies mithilfe Ben Nolans Behaviour-Script zu verwirklichen scheitern allesamt und hinzu kommt das Firebug mir keine Fehlermeldung ausgibt.
Hier nur eines meiner zahlreichen missglückten Einbindungsversuche (hier mal ohne target):
Code:
var selectsearch = {
        '#options' : function(element){
                element.onchange = function(){
                        this.form.submit();
                }
        }

};

Behaviour.register(selectsearch);



Ideen jemand?
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
bacon

Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Mo 03.12.2007 14:08
Titel

Antworten mit Zitat Zum Seitenanfang

Hm das kann ja viele Fehlerquellen haben... der Quelltext gibt dafür nicht genug her. Ich weiß nicht, ob behaviour automatisch onLoad-Events registriert, bspw. Oder ob du das machst. Denn wenn der DOMTree noch nicht geladen ist, kann es durchaus sein, dass die entspr. Knoten, die du suchst, vom Browser nicht gefunden werden.

Code:
var selectsearch = {
        '#options' : function(element){
                element.onchange = function(){
                        this.form.submit();
                }
        }

};


Benutze lieber Prototype-Zeugs:
Code:
Event.observe ( element, 'change', function (ev) { Event.stop(); ... });


Code:
 this.form.submit();


Bist du sicher, dass "this" auf das aktuelle Formular, dem dein Select angehört, zeigt? Du bist auf der sicheren Seite, wenn du stattdessen schreibst:
Code:

element.onchange = function(){
    element.up ('form').submit(); //oder ähnlich
}


element müsste ja im scope liegen, da es im übergeordneten Konstruktor als Parameter übergeben wird.

Ansonsten: Probieren, Probieren, Probieren. Oder erstmal auf behaviour verzichten und das ganze "zu Fuß" bzw. ausschließlich mit Prototype zu erledigen, dann ist der Lerneffekt auch größer. Ansonsten wie gesagt: Der Fehler kann überall sein, das ist nunmal ein Charakterzug von Javascript.
  View user's profile Private Nachricht senden
Anzeige
Anzeige
schachbrett

Dabei seit: 11.10.2006
Ort: Köln
Alter: -
Geschlecht: Männlich
Verfasst Mo 03.12.2007 15:59
Titel

Antworten mit Zitat Zum Seitenanfang

Zitat:
Ich weiß nicht, ob behaviour automatisch onLoad-Events registriert

Ja, machts.

Viel kann man ja nicht falsch machen; hast du am Ende das Skript einfach nicht richtig eingebunden?
  View user's profile Private Nachricht senden
sidisinsane
Threadersteller

Dabei seit: 30.01.2006
Ort: Hamburg
Alter: 52
Geschlecht: Männlich
Verfasst Mo 03.12.2007 17:22
Titel

Antworten mit Zitat Zum Seitenanfang

@schachbrett: Das Skript ist korrekt eingebunden. Auch habe ich diese Funktion schon zig mal ohne Probleme benutzt.

bacon hat geschrieben:
Bist du sicher, dass "this" auf das aktuelle Formular, dem dein Select angehört, zeigt?

Nein, bin ich mir nicht. Meinst Du ich sollte eher mit getElementByID oder ähnliches arbeiten? Ein Framework wie Prototype wollte ich vermeiden.

Habe gerade keine Zeit. Probiere später aber nochmal ein wenig rum. Danke schonmal.


Zuletzt bearbeitet von sidisinsane am Mo 03.12.2007 17:23, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
bacon

Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Mo 03.12.2007 18:24
Titel

Antworten mit Zitat Zum Seitenanfang

Oh sorry, dache behaviour setzt auf prototype auf. Nichtsdestotrotz würde ich dir in jedem Fall (!!) empfehlen, ein JS-Framework wie bspw. Prototype zu verwenden. Alles andere ist letzten Endes Krampf *zwinker*.

getElementById() entspricht der Prototype-Hilfsfunktion $(), wobei du in dem Fall direkt ein Extended Element-Objekt zurück bekommst, welches viele Methoden besitzt, um dir das Leben zu erleichtern.
  View user's profile Private Nachricht senden
m
Moderator

Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Mo 03.12.2007 18:30
Titel

Antworten mit Zitat Zum Seitenanfang

Aber eigentlich ist das soweit korrekt und funktioniert, müßte funktionieren.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
sidisinsane
Threadersteller

Dabei seit: 30.01.2006
Ort: Hamburg
Alter: 52
Geschlecht: Männlich
Verfasst Mo 03.12.2007 18:56
Titel

Antworten mit Zitat Zum Seitenanfang

Sorry an alle die ich hier verrückt gemacht habe. Das Anfangsbeispiel funktioniert. Ich habe keine Ahnung was da los war. Danke für die Hilfestellungen und nochmals entschuldigung für meine Panikmache. * Ich bin unwürdig *
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
Ähnliche Themen Javascript: Problem mit Event 'onorientationchange'
mit onchange weitere eingabefelder generieren?
Auswahlbox mit „onchange-Anweisung XHTML 1.0 valide bekommen
Inline-Grafiken mit IE?
INLINE BORDER CSS
inline frames 2
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.