php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS Probleme mit HTML5, Bootstrap oder jQuery ?

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 13-02-2008, 23:31
pekka
 PHP Master
Links : Onlinestatus : pekka ist offline
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
pekka befindet sich auf einem aufstrebenden Ast
Standard Formularweites onChange?

Ich habe Dialogfenstern HTML-Formulare mit verschiedenen Eingabefeldern.

Ich brauche einen Mechanismus, der beim Schließen des Dialogs erkennt, wenn sich in einem Formular was verändert hat, und eine Meldung "Fenster ohne Speichern schließen" anzeigt.

Haken tut es bei der Erkennung der Veränderung.
- onChange greift nicht für ein ganzen Formular
- die einzelnen Eingabefelder stammen aus Modulen, bringen teilweise schon onChange-Events mit und sie anzupassen wäre ein Riesengeschäft, Problematisch auch mit Abwärtskompatibilität usw. usf...

Langer Rede kurzer Sinn:
Kennt jemand eine einfache Implementation des onChange-Events für ein ganzes Formular? Vielleicht aus einem Framework oder so...
Mit Zitat antworten
  #2 (permalink)  
Alt 13-02-2008, 23:50
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

du kannst z.B. das Keypress-Event überwachen:
PHP-Code:
window.captureEvents(Event.KEYPRESS);
window.onkeypress blub;
function 
blub (arg) {
  
// hier prüfen wo, was, ... geändert und Flag entsprechend setzen
  // beim Fensterschliessen diesen Flag prüfen und reagieren

Mit Zitat antworten
  #3 (permalink)  
Alt 13-02-2008, 23:58
pekka
 PHP Master
Links : Onlinestatus : pekka ist offline
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
pekka befindet sich auf einem aufstrebenden Ast
Standard

Mmm, das wird nicht reichen, weil Formularelemente ja auch mit der Maus verändert werden können (Checkbox, Select....) .... und als nächste Schwierigkeitsstufe auch hidden-Felder, deren Wert per Skript verändert wird....
Mit Zitat antworten
  #4 (permalink)  
Alt 14-02-2008, 00:04
tontechniker
 PHP Senior
Links : Onlinestatus : tontechniker ist offline
Registriert seit: Jul 2005
Beiträge: 1.972
tontechniker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ein Lösungsansatz für mootools - weitere Typen kannst du hinzufügen, evtl. funktioniert es auch wenn man die Events cloned. (ungetestet):
Code:
var changed = false;

$$ ( 'form' ) . getChildren  ( ) . each ( function ( element ) {
	if ( element . get ( 'tag' ) == 'input' ) {
		switch ( element . get ( 'type' ) ) {
			case 'text':
			case 'password':
				element . addEvent ( 'keydown', function ( event ) {
					event . target . getParent ( ) . fireEvent ( 'change' );
				} );
				break;
			case 'checkbox':
			case 'file':
			case 'radio':
				element . addEvent ( 'change', unction ( event ) {
					event . target . getParent ( ) . fireEvent ( 'change' );
				} );
				break;
			default:
				break;
		}
	}
} );
__________________
Die Regeln | rtfm | register_globals | strings | SQL-Injections | []
Mit Zitat antworten
  #5 (permalink)  
Alt 14-02-2008, 01:26
pekka
 PHP Master
Links : Onlinestatus : pekka ist offline
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
pekka befindet sich auf einem aufstrebenden Ast
Standard

Suupergeil, vielen Dank!
So schön hätte ich das nie hinbekommen, schon gar nicht um die Uhrzeit.

Ich benutze prototype und mußte es entsprechend umschreiben. Der größere Haken ist, daß IE7 das onChange()-event im Formular nicht interpretiert und somit nichtmal auf ein fireEvent() reagiert.

Meine Lösung ist jetzt, den Inhalt des onchange-Strings des Formulars zu eval() en. (Ein onChange() ausführen geht aus o.g. Gründen auch nicht.) Nicht das eleganteste der Welt, aber es tut den Job. Getestet in FF2 und IE7 mit Textfeldern, Selects, Checkboxen, File-Inputs. Textareas müßten auch gehen.

@Tontechniker: Lust, deine MooTools-Lösung noch enstprechend umzubauen (onchange IE-Kompatibel)? Dann könnten wir beides in den Code-Schnipseln ablegen.

Hier also für die Nachwelt die Prototype-Version:

Code:
formid = "meineFormularID";
 
$ ( formid ) . getElements()   . each ( function ( element ) {
    
        switch ( element . type ) {
            case 'text':
            case 'password':
                element . observe ( 'keydown', function ( event ) {
                    
                    eval ( event . element() . form . onchange);
                    
                    
                } );
                break;
            
            case 'checkbox':
            case 'file':
            case 'radio':
            default:     
                element . observe ( 'change', function ( event ) {
                    
                      eval ( event . element() . form . onchange);
                  
                } );
                break;
            
            
        
    }
} );

Geändert von pekka (14-02-2008 um 01:46 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 14-02-2008, 22:06
tontechniker
 PHP Senior
Links : Onlinestatus : tontechniker ist offline
Registriert seit: Jul 2005
Beiträge: 1.972
tontechniker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

So, noch mal ein bisschen rumgebastelt, der Workaround läuft nur beim IE. Wenn man möchte (und zum Beispiel auf Inlinecode steht) kann man eval benutzen, ansonsten weist man onchange eine Funktion zu:
Code:
form . set ( 'onchange', function ( event ) { ... } );
Code:
$$ ( 'form' ) . getChildren  ( ) . each ( function ( element ) {
	if ( element . get ( 'tag' ) == 'input' ) {
		switch ( element . get ( 'type' ) ) {
			case 'text':
			case 'password':
				element . addEvent ( 'keydown', function ( event ) {
					if ( Browser . Engine . gecko ||  Browser . Engine . webkit ||  Browser . Engine . presto ) {
						event . target . getParent ( ) . fireEvent ( 'change' );
					} else {
						event . target . getParent ( ) . get ( 'onchange' ) . run ( event ) .bindWithEvent ( );
						//eval ( event . target . getParent ( ) . get ( 'onchange' ) );
					}
				} );
				break;
			case 'checkbox':
			case 'file':
			case 'radio':
			default:
				element . addEvent ( 'change', function ( event ) {
					if ( Browser . Engine . gecko ||  Browser . Engine . webkit ||  Browser . Engine . presto ) {
						event . target . getParent ( ) . fireEvent ( 'change' );
					} else {
						event . target . getParent ( ) . get ( 'onchange' ) . run ( event ) .bindWithEvent ( );
						//eval ( event . target . getParent ( ) . get ( 'onchange' ) );
					}
				} );
				break;
		}
	}
} );
__________________
Die Regeln | rtfm | register_globals | strings | SQL-Injections | []
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni


 

Aktuelle PHP Scripte

ModuleStudio ansehen ModuleStudio

Modellgetriebene Entwicklung von Erweiterungen für das Open Source Framework Zikula.

15.01.2019 Guite | Kategorie: PHP ENTWICKLUNGSUMGEBUNG
FAQ Script PHP ansehen FAQ Script PHP

FAQ Script PHP is a simple knowledgebase script and you could use it as a Frequently Asked Question section on your website. It is written in PHP and MySQL.

14.01.2019 nevenov | Kategorie: PHP/ FAQ
Admidio Mitgliederverwaltung

Admidio ist eine kostenlose Online-Mitgliederverwaltung, die für Vereine, Gruppen und Organisationen optimiert ist. Sie besteht neben der Mitgliederverwaltung aus einer Vielzahl an Modulen (Foto-, Download-, Terminverwaltung), die in eine neue oder besteh

08.01.2019 webmaster52@ | Kategorie: PHP/ Groupware
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:36 Uhr.