BigPeter: IF-Statements mit || (oder)

<form name="marainfos" action="db/marainfo_add.php" method="post" onsubmit="return info_add_check()">  
<table cellpadding="1" cellspacing="0" border="0">  
  <tr>  
    <td>  
      <select size="1" name="mara1">  
        <option value="0" selected>- auswählen -</option>  
        <option value="1">Auswahl A</option>  
        <option value="2">Auswahl B</option>  
      </select>  
    </td>  
  </tr>  
  <tr>  
    <td><input type="text" size="50" maxlength="50" name="maratitle1" value="Überschrift"></td>  
  </tr>  
  <tr>  
    <td><textarea name="maratext1" id="mcb1">Informationen hier einfügen</textarea></td>  
  </tr>  
  <tr>  
    <td><input type="submit" name="button" value="eintragen"></td>  
  </tr>  
</table>  
</form>
function info_add_check() {  
 // Variablen vereinfachen  
 a = document.marainfos;  
 // Überprüfen auf Eingaben  
 if(a.mara1.value == '0') {alert('xyz'); return false;}  
 if(a.maratitle1.value == '' || a.maratitle1.value == 'Überschrift') {alert('xyz') return false;}  
if(a.maratext1.value == '' || a.maratext1.value == 'Informationen hier einfügen') {alert('xyz'); return false;}  
}

Dieses Javascript bringt mich noch zur Weißglut D:
Wenn ich die "||" (oder) if-Statements rausnehme klappt es reibungslos, aber mit Ihnen geht die ganze Funktion den Bach runter und ich weiß nicht wieso :(

Irgendwer eine Hilfestellung parat ?

PETE

  1. Hi!

    Ich vermisse erstmal nur ein Semikolon:

    if(a.maratitle1.value == '' || a.maratitle1.value == 'Überschrift') {alert('xyz') return false;}

    --
    Vergesst Chuck Norris.
    Sponge Bob kann unter Wasser grillen!
    1. Ich vermisse erstmal nur ein Semikolon:

      Das Semikolon ist vorhanden, ist beim vereinfachen des Codes mit verschwunden :)

      1. Ich vermisse erstmal nur ein Semikolon:

        Das Semikolon ist vorhanden, ist beim vereinfachen des Codes mit verschwunden :)

        Dann verschweigst Du was. Code 'funzt'. IE8, mit nicht mehr als du geliefert hast, hab lediglich nen Scripttag um die Funktion gemacht.

        --
        Vergesst Chuck Norris.
        Sponge Bob kann unter Wasser grillen!
        1. Ich vermisse erstmal nur ein Semikolon:

          Das Semikolon ist vorhanden, ist beim vereinfachen des Codes mit verschwunden :)

          Dann verschweigst Du was. Code 'funzt'. IE8, mit nicht mehr als du geliefert hast, hab lediglich nen Scripttag um die Funktion gemacht.

          you got me - ein Simikolon hat gefehlt ... und ich hätte schwören können ...

          das ist peinlich aber DANKE ! ^^"

  2. Hallo Peter,

    als allererstes möchte ich Dich auf Deinen letzten Thread ansprechen. Hat unsere Diskussion Dir etwas gebracht?

    Rückmeldungen sind in einem Forum sehr wichtig.

    »  if(a.mara1.value == '0') {alert('xyz'); return false;}  
    
    >  if(a.maratitle1.value == '' || a.maratitle1.value == 'Überschrift') {alert('xyz') return false;}  
    > if(a.maratext1.value == '' || a.maratext1.value == 'Informationen hier einfügen') {alert('xyz'); return false;}  
    > }
    
    

    Irgendwer eine Hilfestellung parat ?

    ja, du solltest das DRY-Prinzip verinnerlichen. Die Eigenschaft http://de.selfhtml.org/javascript/objekte/elements.htm#default_value@title=defaultValue hilft Dir, die vorhandenen Verletzungen dieses Prinzips zu vermeiden.

    Freundliche Grüße

    Vinzenz

    1. als allererstes möchte ich Dich auf Deinen letzten Thread ansprechen. Hat unsere Diskussion Dir etwas gebracht?

      Ja ich habe anhand der VIELEN Hilfestellungen herausgefunden wie ich das Problem am besten angehe und es funktioniert nun.
      Ich wollte antworten - jedoch war ich anhand der vielen Beiträge und der stark verzweigten Baumstruktur in der sich mehrere Unterhaltungen befanden etwas überfordert und wusste nicht genau WO ich nun ein "Danke funktioniert so" posten sollte ._."

      ja, du solltest das DRY-Prinzip verinnerlichen. Die Eigenschaft http://de.selfhtml.org/javascript/objekte/elements.htm#default_value@title=defaultValue hilft Dir, die vorhandenen Verletzungen dieses Prinzips zu vermeiden.

       if(a.maratitle1.value == '' || a.maratitle1.value == a.mratitle1.defaultValue)  
                                                     {alert('Bitte eine Überschrift eingeben')                 return false;}
      

      So habe ich es probiert und es hat auch nicht geholfen :/
      Schon wieder einen Dreher drin ?

      1. if(a.maratitle1.value == '' || a.maratitle1.value == a.mratitle1.defaultValue)

        {alert('Bitte eine Überschrift eingeben')                 return false;}

        
        > So habe ich es probiert und es hat auch nicht geholfen :/  
        > Schon wieder einen Dreher drin ?  
          
        Ich meinte natürlich so ...  
        ~~~javascript
         if(a.maratitle1.value == '' || a.maratitle1.value == a.mratitle1.defaultValue)  
                                                       {alert('Bitte eine Überschrift eingeben');                return false;}
        
  3. @@BigPeter:

    nuqneH

    In value sollten nur wirkliche Eingabewerte stehen, niemals die Beschriftung des Eingabefelds.

    Benutze das HTML-Attribut @placeholder bzw. Label inside!

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
    1. In value sollten nur wirkliche Eingabewerte stehen, niemals die Beschriftung des Eingabefelds.

      Benutze das HTML-Attribut @placeholder bzw. Label inside!

      Sehr viel besserer workaround.
      Ich hätte vorher auf solch eine Idee kommen sollen - nun heißt es erstmal ein paar Inputfelder ändern.

      Vielen lieben Dank

      PETE !

    2. In value sollten nur wirkliche Eingabewerte stehen, niemals die Beschriftung des Eingabefelds.

      Wie ich diese apodiktischen Aussagen liebe…

      Es kann zum Problem werden, wenn man es falsch macht und nicht zwischen Vorbelegung und Beschriftung unterscheidet. Es ist jedoch einfach, ein Script zu schreiben, das das berücksichtigt.

      Benutze das HTML-Attribut @placeholder

      Der Hinweis ist angebracht, aber viele Browser können das noch nicht und die verbreiteten Polyfills setzen auf value.

      bzw. Label inside!

      Die aufgeführten Nachteile einer value-Lösung halte ich für nicht stichhaltig. Sie treffen lediglich auf undurchdachte Umsetzungen zu.

      »Beschriftung und wirkliche Nutzereingabe im Feld müssen unterschieden werden; der Textstil (Farbe) muss mit JavaScript geändert werden.«

      Gute Lösungen mit value lösen dieses Problem. Sie setzen eine Klasse beim input-Feld, wenn das Label eingebettet ist, sodass eine unabhängige Formatierung dieses Status möglich ist.

      »Sollen auch vorbelegte Felder verwendet werden, muss die Unterscheidung auch im Markup (HTML) erfolgen.«

      Muss sie nicht, wenn die Einbettung mit halbwegs vernünftigem DOM Scripting erfolgt.

      »Wenn das JavaScript zu spät ausgeführt wird, gibt der Nutzer schon etwas ins Feld ein, bevor dessen Beschriftung gelöscht wurde. Dadurch wird der Beschriftungstext unerwünscht zu einem Teil der Eingabe.«

      Die Beschriftung sollte nicht schon im value-Attribut im HTML stehen, sondern in einem label-Element, was gegebenenfalls mit Unobtrusive JavaScript eingebettet wird, während das label-Element versteckt werden kann. Das ist alles.

      Prinzipiell hat dein Script ein ähnliches Problem im beschriebenen Fall: Wenn ich den Fokus vor der Scriptausführung ins Feld setze (das nimmt mir autofocus sogar ab) und lostippe, so legt das Script das Label trotzdem über das Feld, in das ich gerade tippe.

      Ich sehe mehr Nachteile bei einer Lösung mit einem Label, welches über dem input liegt. Es macht Mausinteraktion problematisch, wie auch in den Kommentaren angemerkt. Darüber hinaus blendet dein Script das label nicht barrierefrei aus, wie ich bereits anmerkte.

      Mathias