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, 22: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, 22: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, 22: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 13-02-2008, 23: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, 00: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 00:46 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 14-02-2008, 21: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

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

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 02:18 Uhr.