Zurück   PSD-Tutorials.de > Webbereich > PHP und andere Scriptsprachen


Antwort
 
Themen-Optionen
Alt 18.05.2012, 15:55   #1 Nach oben scrollen
Newbie
Newbie
 
Benutzerbild von Espressolia
 

Registriert seit: 04.11.2009
Ort: Sachsen
Beiträge: 65
Kamera: meine Augen :-)
Verwendet: Photoimpakt, Swishmax und diverse andere

jquery einzelne Elemente einer CSS Klasse auslesen


Hallo,

ich bin wieder am verzweifeln und brauche euer hilfe.

Also ich möchte alle Elemente einer CSS- Klasse auswählen der kein Value Wert besitzt (Pflichtfelder im Formular). Also er soll alle inputs Felder die die Klasse "pflicht" haben und leer sind ein roten Rahmen verpassen.

Z.B. habe ich vier Pflichtfelder in mein Formular:
HTML-Code:
<form action="" method="post">
  <input type="texteld" name=feld1" class="textfeld pflicht" />
  <input type="texteld" name=feld2" class="textfeld pflicht" />
  <input type="texteld" name=feld3" class="textfeld pflicht" />
  <input type="texteld" name=feld4" class="textfeld pflicht" />
...
Wenn keine ausgefüllt sind sollen alle ein roten Rahmen bekommen, wenn 3 unausgefüllt die 3 usw.

Geht das?

ja ich weß ich könnte jeden eine ID verpassen, aber bei längeren Formularen wäre der Code elend lang...

ich habe schon probiert mit:
Code:
alert($(".pflicht").val());
den Wert auszulesen, aber hier bekomme ich nur den ersten.

Kann mir jemand helfen

Danke im vorraus
Esspresolia
  Mit Zitat antworten


Alt 18.05.2012, 16:55   #2 Nach oben scrollen
PHP - Flex Programmierer
HelperHelper
 
Benutzerbild von Robbyn-
 

Registriert seit: 18.12.2006
Ort: Schmallenberg
Beiträge: 526
Verwendet: CS6, Eclipse, IntelliJ IDEA 12, Flash Builder 4.7

Das wäre eine Lösung:

Code:
var classList =$('#divId').attr('class').split(/\s+/);
$.each( classList, function(index, item){
    if (item === 'someClass') {
       //do something
    }
});
  Mit Zitat antworten
Alt 18.05.2012, 17:50   #3 Nach oben scrollen
Posting-Frequenz: 14µHz
Premium-SupporterPremium-SupporterPremium-SupporterPremium-SupporterPremium-Supporter
 
Benutzerbild von Duddle
 

Registriert seit: 03.02.2006
Ort: Dresden
Beiträge: 3.225

jQuery hat sehr mächtige Auswahl- und Filtermöglichkeiten. Alle inputs mit der Klasse "pflicht" bekommst du bspw. mit
Code:
$pflichties = $("input.pflicht");
An diese Elemente kannst du verschiedenste Events binden, z.B. das Fokussieren des Feldes:
Code:
$pflichties.focus(function() {
  //ausgeführt bei Event
});
Dabei könntest du alle Pflichtfelder mit each() durchlaufen, jeweils die "Fehler"-Klasse entfernen und falls der Wert vom aktuellen Feld (Stichwort $(this)) leer ist sie wieder hinzufügen.

Ansonsten gibt es genügend relevante Tutorials.


Duddle
__________________
»To a cosmologist, a hundred thousand light-years rounds down to zero.« - RobotRollCall
  Mit Zitat antworten
Alt 18.05.2012, 19:35   #4 Nach oben scrollen
Newbie
Newbie
Themenstarter
 
Benutzerbild von Espressolia
 

Registriert seit: 04.11.2009
Ort: Sachsen
Beiträge: 65
Kamera: meine Augen :-)
Verwendet: Photoimpakt, Swishmax und diverse andere

Hi danke für die Antworten.

Ich hab grad auch ne Lösung endeckt

Code:
$(.pflicht").lenght;
$("pflicht").eq(nummer).val();

und das per schleife durchlaufen lassen.
Ist das auch empfehlenswert?
  Mit Zitat antworten
Alt 19.05.2012, 01:58   #5 Nach oben scrollen
Newbie
Newbie
 
Benutzerbild von freaki
 

Registriert seit: 03.04.2006
Beiträge: 83

So. Das ist ganz easy. Passt du auf

Code:
// Anfangen, wenn das Dokument bereit ist
jQuery(document).ready(function($){
	// Selector für das Form
	var formSelector = '#textForm';
	// Selector für die Pflichtinputs
	var requiredSelector = 'input.required';
	// Klasse, die getoggled werden soll, wenn das Feld nicht ausgefüllt ist.
		var notFilledClass = 'notFilled';
	// Event callback für das Form, dass du abschicken willst 
	jQuery(formSelector).submit(function(){
		// Diese Variable ist dafür da zu gucken, ob es Fehler bzw. leere Felder im Form gibt. Ist sie am Ende =false, dann wird das Form nicht abgeschickt.
		var noErrors = true;
		// Hier holt er sich ALLE Inputs in der Form, die ausgefüllt werden sollten und geht diese durch (wie in einer Schleife).
		$(this).find(requiredSelector).each(function(){
			// Die jQuery-Representation des input-Feldes
			var self = $(this);
			// Variabel, die entweder true oder false ist, wenn die Value leer ist. Hier habe ich mal beides eingebaut, weil ich schon Bugs mit jQuery.val() erlebt habe.
			var addClass = (self.val() == '' && self.attr('value') == '');
			
			// Wenn wir noch nie Fehler hatten und addClass = true ist, sprich, wir ein leeres Feld haben, dann setzen wir noErrors = true
			if(noErrors == true && addClass == true){
				noErrors = false;
			}
			
			// Hier wird die Klasse getoggled, abhängig von der Variable für den Value-Check. Ist die =true, so wird die Klasse dem Input hinzugefügt. Ist sie =false, dann wird sie wieder entfernt.
			self.toggleClass(notFilledClass, addClass);
		});
		// noError = true, so wird das Form nicht abgeschickt
		if(noErrors){
			return false;
		}
	});
});
http://pastebin.com/yED6NkAN (mit highlighting)

Im Prinzip ist das ganze ganz einfach. Wird das Form abgeschickt, dann werden alle benötigten Felder durchgegangen und geguckt, ob eines davon leer ist. Sobald eines leer ist, wird das Form nicht abgeschickt. Den entsprechenden Feldern wird vorher noch eine Klasse verpasst.

Die Klasse kannst du selbstverstädnlich anpassen, genau wie alles andere. Dafür habe ich das alles in Variablen gepackt.

Du solltest die Kommentare vor dem onlinegehen entfernen oder wenigstens übersetzen. Deutscher Quelltext ist...naja nicht wartbar ^^ Aber die Diskussion will ich jetzt nicht vom Zaun brechen.

Ich hoffe das hilft dir.

Geändert von freaki (19.05.2012 um 02:02 Uhr).
  Mit Zitat antworten
Alt 19.05.2012, 03:42   #6 Nach oben scrollen
me[code].Java(Script)
MemberMember
 
Benutzerbild von mindraper
 

Registriert seit: 12.08.2007
Ort: Zuhause
Beiträge: 188
Verwendet: Adobe CS5 (PS/I/ID/Bridge/FL), Sublime Text 2, NetBeans, Blender, Pencil

hi.

das ganze ginge ohne jquery sogar mit einem sehr viel einfacheren code. angenommen, dein html-formular sähe so aus:

HTML
HTML-Code:
<form id="myform" action="#" method="post" accept-charset="utf-8" enctype="multipart/form-data">
    <input type="text" name="field_1" class="required">
    <input type="text" name="field_2" class="required">
    <input type="text" name="field_3" class="required">
    <input type="text" name="field_4" class="required">
    <input type="submit" value="Absenden">
</form>
nichts aufregendes hier. dann schreibst du in einem scriptblock einfach folgendes:

JavaScript
PHP-Code:
window.onload = function () {
    var 
form document.getElementById('myform'),
        
inputs form.getElementsByTagName('input');

    
form.onsubmit = function () {
        var 
0,
            
len inputs.length,
            
req = [],
            
error false,
            
cur;

        while (
len) {
            if (/
required/.test(inputs[i].className)) {
                
req.push(inputs[i]);
            }
            
i+1;
        }

        
0;
        
len req.length;

        while (
len) {
            
cur req[i];
            if (
cur.value === '') {
                
cur.style.borderColor '#ff0000'/* Anpassen */
                
cur.style.borderWidth '5px'/* Anpassen */
                
error true;
            }
            
i+1;
        }

        return !
error;
    };
}; 
fertig.

EDIT:
ich hab's getestet in IE 7 - 9, FF 12, O 11.6, S 5.1.5, Chrome 18
läuft überall problemlos. IE 6 steht mir leider nich zur verfügung
__________________
Nichts ist so gerecht verteilt wie der Verstand.
Jeder denkt, er hätte genug.

Geändert von mindraper (19.05.2012 um 03:53 Uhr).
  Mit Zitat antworten
Alt 19.05.2012, 13:47   #7 Nach oben scrollen
Newbie
Newbie
 
Benutzerbild von freaki
 

Registriert seit: 03.04.2006
Beiträge: 83

Entschuldige, aber wo ist das jetzt einfacher?

Mal abgesehen davon, dass er eine jQuery-Variante wollte und es irgendwo sinnfrei ist normalen JS-Code in einem Projekte zu benutzen, dass sonst auf jQuery setzt, ist bei dir auch nichts wirklich einfacher, weil das genau der gleiche (vielleicht auch weniger optimierter) Code ist, der auch so abläuft, wenn man das mit jQuery macht.
Zudem sollte man kein Styling in JS-Code schreiben. Das gehört da einfach nicht rein. Den Fehler habe ich während des zusammentippens aber auch gemacht und später gemerkt, dass eine Klasse sinnvoller ist.
Zumal hast du bei deinen Code nicht bedacht, was passiert, wenn der Ausfüller das Formular noch einmal mit einem leeren Pflichtfeld abschickt, aber ein anderes bereits rot markiertes schon ausgefüllt hat. Der Border bleibt dann Rot und dick. Den Originalborder wieder herzustellen ist direkt mit CSS-Anweisungen auch schwer. Daher habe ich den Klassenweg gewählt.


Das mit den return der error-Variable hätte ich allerdings auch machen sollen ^^
Meine Doofheit.

Aber wenn du Code postest, solltest du ihn auch ein bisschen erklären. Schafft der Threadstarter das vorher nicht alleine, dann versteht er womöglich den Code gar nicht, den du letztlich als Lösung postest.

Geändert von freaki (19.05.2012 um 13:52 Uhr).
  Mit Zitat antworten
Alt 20.05.2012, 16:29   #8 Nach oben scrollen
me[code].Java(Script)
MemberMember
 
Benutzerbild von mindraper
 

Registriert seit: 12.08.2007
Ort: Zuhause
Beiträge: 188
Verwendet: Adobe CS5 (PS/I/ID/Bridge/FL), Sublime Text 2, NetBeans, Blender, Pencil

hi.

Zitat:
Zitat von freaki Beitrag anzeigen
Entschuldige, aber wo ist das jetzt einfacher?
für den js-interpreter ist das auf jeden fall einfacher, sprich schneller, weil er nicht dauernd den umweg gehen muss über die jquery-methoden.

Zitat:
Zitat von freaki Beitrag anzeigen
Mal abgesehen davon, dass er eine jQuery-Variante wollte und es irgendwo sinnfrei ist normalen JS-Code in einem Projekte zu benutzen, dass sonst auf jQuery setzt, ...
ok, die TE wollte eine jquery-variante. erwischt.
zu der aussage, es sei "nicht sinnvoll" auf natives js zurückzugreifen wo immer möglich: das sehe ich anders. und zwar einesteils aus dem oben genannten grund, andererseits weil es durchaus sinnvoll ist, so viel wie irgend möglich ohne den einsatz eines frameworks abzudecken. ein framework ist und bleibt eben immer nur ein framework. wenn du den code in die jquery-wrapperfunction einbindest, hast du später nur noch über massive umwege die möglichkeit, wirklich nativen code zu nutzen. und sobald sich methoden des frameworks ändern, musst du deinen kompletten code im ernstfall (worst-case) neu schreiben. erzähl' mir doch nicht, dass das sinnvoller ist.

Zitat:
Zitat von freaki Beitrag anzeigen
Zudem sollte man kein Styling in JS-Code schreiben. Das gehört da einfach nicht rein. Den Fehler habe ich während des zusammentippens aber auch gemacht und später gemerkt, dass eine Klasse sinnvoller ist.
das ist zwar prinzipiell eine ansichtssache, in diesem fall gebe ich dir aber mit deinem vorschlag via css-classes zu arbeiten recht. my fault.

Zitat:
Zitat von freaki Beitrag anzeigen
Aber wenn du Code postest, solltest du ihn auch ein bisschen erklären. Schafft der Threadstarter das vorher nicht alleine, dann versteht er womöglich den Code gar nicht, den du letztlich als Lösung postest.
zeig' mir bitte die stelle in meinem code, die so unglaublich kompliziert ist, dass ein 2minütiges bemühen vom großen G nicht eine mehr als ausreichende erklärung liefern würde. ich bin gespannt.

gruß
__________________
Nichts ist so gerecht verteilt wie der Verstand.
Jeder denkt, er hätte genug.

Geändert von mindraper (20.05.2012 um 16:32 Uhr).
  Mit Zitat antworten
Alt 21.05.2012, 15:23   #9 Nach oben scrollen
Helper
HelperHelper
 

Registriert seit: 25.01.2007
Beiträge: 201

Hier nochmal eine etwas kürzere jQuery Variante:
http://jsfiddle.net/PPdhM/
komisch finde ich nur, dass zumindest bei mir der Selektor
Code:
$('input.pflicht[value=""]')
nicht funktioniert hat. damit könnte man sich nämlich die filter Funktion sparen.

EDIT: sehe gerade, dass mein weg ja nicht soo viel kürzer ist Anders halt.
__________________
Java ist nicht JavaScript!

Geändert von SineTempore (21.05.2012 um 15:26 Uhr).
  Mit Zitat antworten
Alt 21.05.2012, 21:22   #10 Nach oben scrollen
Newbie
Newbie
 
Benutzerbild von freaki
 

Registriert seit: 03.04.2006
Beiträge: 83

@mind:
Klar. Ein Framework ist immer ein Umweg. Alles dauert länger und wird anders verarbeitet, bis es dann schließlich wieder "normaler" JSCode ist. Aber die Dinger sind ja hauptsächlich zur Vereinfachung gedacht.
Den Code an und für sich schreibt man in eigenen, umständlichen Funktionen bei nativen Code in einem Projekt selbst. Die Frage ist, ob das immer so viel besser ist. Ermessessache. Lernen sollte der TE aber auf jeden Fall mit nativen und nicht mit jQuery. Frameworks von Anfang an bringen nichts, wenn man verstehen will.

Zur Updatefähigkeit bzw. -kompatibilität musst du aber natürlich die Größe des Framework und die Seiten bedenken, die darauf beruhen. Es wird immer die alten Versionen geben, es wird zwischen Versionen immer auf Backwardskompatibilität geachtet. Außerdem gilt immer der Standardspruch: Never touch a running system.
Zur Not kommt man auch prima mit einer "alten" Version von jQuery klar.

Ich will über die Aussage der "Ansichtssache" nicht streiten, daher sage ich dazu nichts.

Naja, für Anfänger ist da ne Menge kompliziertes. Schleifen, RegEx, Array-Funktionen ^^ Naja, wie gesagt. Ist ne Levelsache.

@SineTempore: Das Problem hatte ich auch. Sonst hätte ich das nicht so kompliziert gelöst.
Du hast jetzt den von mir benannten Bug nicht mit drin. val() geht auf die Property, soweit ich das richtig recherchiert habe. Manchmal kann aber die aber auch voll sein und das Value-Attribut leer, sprich Form kaputt.
Ist ne komische Sache. Aber naja. Deswegen checke ich lieber doppelt seit dem Tag.

Espressolia ist wohl irgendwo verschütt gegangen ^^
  Mit Zitat antworten
Alt 22.05.2012, 08:06   #11 Nach oben scrollen
Newbie
Newbie
Themenstarter
 
Benutzerbild von Espressolia
 

Registriert seit: 04.11.2009
Ort: Sachsen
Beiträge: 65
Kamera: meine Augen :-)
Verwendet: Photoimpakt, Swishmax und diverse andere

... würd ich ned so sagen, mit dem verschütt gehen .. lese halt interessiert mit ;-) ;-) ;-) und versuche es nachzuvollziehen :-)
  Mit Zitat antworten
Alt 22.05.2012, 20:45   #12 Nach oben scrollen
me[code].Java(Script)
MemberMember
 
Benutzerbild von mindraper
 

Registriert seit: 12.08.2007
Ort: Zuhause
Beiträge: 188
Verwendet: Adobe CS5 (PS/I/ID/Bridge/FL), Sublime Text 2, NetBeans, Blender, Pencil

hi.

Zitat:
Zitat von Espressolia Beitrag anzeigen
lese halt interessiert mit ;-) ;-) ;-) und versuche es nachzuvollziehen :-)
super. wenn's wo hakt: löcher in die bäuche fragen. in unsere.

Zitat:
Zitat von freaki Beitrag anzeigen
@mind:
Klar. Ein Framework ist immer ein Umweg. Alles dauert länger und wird anders verarbeitet, bis es dann schließlich wieder "normaler" JSCode ist.


Zitat:
Zitat von freaki Beitrag anzeigen
Den Code an und für sich schreibt man in eigenen, umständlichen Funktionen bei nativen Code in einem Projekt selbst. Die Frage ist, ob das immer so viel besser ist. Ermessessache.
hm, ok. allerdings kommt es auch genauso oft vor, dass ein framework den code bzw. die logik nicht zwingend leichter macht, sondern nur in der art anders. damit meine ich, dass man statt "normalen" schleifen z. b. jQuerys "each()"-methode nutzt. in solchen fällen kann ich den zugewinn halt nicht wirklich erkennen.

ich bin letzten endes immer der ansicht, dass man sich in sehr vielen fällen ganz problemlos ohne framework behelfen kann. zu viele leute greifen meiner meinung nach immer viel zu schnell zu jQuery & konsorten, sobald sie "JavaScript" hören.
wenn ich mit 5kb code eine sache machen kann, wieso soll ich mir dann zusäztlich (minified!) ~92kb runterladen?

Zitat:
Zitat von freaki Beitrag anzeigen
Lernen sollte der TE aber auf jeden Fall mit nativen und nicht mit jQuery. Frameworks von Anfang an bringen nichts, wenn man verstehen will.
sehe ich genauso. könnte ja doch noch was mit uns werden
__________________
Nichts ist so gerecht verteilt wie der Verstand.
Jeder denkt, er hätte genug.

Geändert von mindraper (22.05.2012 um 20:51 Uhr).
  Mit Zitat antworten
Alt 23.05.2012, 01:02   #13 Nach oben scrollen
Newbie
Newbie
 
Benutzerbild von freaki
 

Registriert seit: 03.04.2006
Beiträge: 83

Zitat:
Zitat von mindraper Beitrag anzeigen
super. wenn's wo hakt: löcher in die bäuche fragen. in unsere.
Mein Reden

Genereller Rat an dich Espressolia: Viel ausprobieren, selber suchen, die API studieren, dabei lernt man oft am meisten. Macht natürlich nur Sinn, wenn du das weiterhin verwenden willst und das hier nicht nur eine einmalige Sache ist.
Klingt jetzt als würde ich mir die Arbeit der "Beantwortung" nicht machen wollen, aber Fragen darfst du selbstverständlich auch gerne immer
  Mit Zitat antworten
Alt 23.05.2012, 06:47   #14 Nach oben scrollen
Newbie
Newbie
Themenstarter
 
Benutzerbild von Espressolia
 

Registriert seit: 04.11.2009
Ort: Sachsen
Beiträge: 65
Kamera: meine Augen :-)
Verwendet: Photoimpakt, Swishmax und diverse andere

keine bange @freaki , ich mache mich nur bei problemen bemerkbar, wenn ich nach x-mal probieren echt nicht weiterkomme ... manchmal sieht man eben z.b. halt die lösung nicht, auch wenn man davor steht, *schmunzel
  Mit Zitat antworten
Alt 24.05.2012, 17:38   #15 Nach oben scrollen
Newbie
Newbie
Themenstarter
 
Benutzerbild von Espressolia
 

Registriert seit: 04.11.2009
Ort: Sachsen
Beiträge: 65
Kamera: meine Augen :-)
Verwendet: Photoimpakt, Swishmax und diverse andere

Hallo,

ich habe doch noch ein Problem welches indirekt sich auf das Thema bezieht: Per Javascript habe ich jetzt eine Lösung welches hervorragend alle Pflichtfelder die nicht ausgefüllt sind hervorhebt. Leider ist der Firefox nur perfekt im IE gibt es CSS Probleme Im IE werden meine Select Boxen nicht per CSS hervorgehoben

HTML-Code:
<select id="regio" class="pflicht" name="region" style="border: 1px solid rgb(204, 0, 0)" > ... </select>
Die Borderangabe wird einfach ignoriert

Kann mir jemand helfen?
  Mit Zitat antworten
Antwort


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