2012-04-02 2 views
0

Erklärung: Ich bin mir nicht sicher, ob das ein Parameter ist. Bitte erleuchte.Wie kann ich die Anzahl der Parameter in diesem Javascript erhöhen?

Ich habe eine medizinische Fragebogenform mit fast 19 Ja und Nein Optionsfeldern. Die Optionsfelder jeder Frage müssen einen eindeutigen Namen haben, damit es funktioniert. Ich schaffe es, einen geeigneten Code zu finden, um einen Textbereich umzuschalten, wenn das Optionsfeld Ja ausgewählt ist, aber es kann nur in einem der Eingabenamen funktionieren und es gibt 18 weitere, die es ebenfalls benötigen.

Meine Hauptfrage ist:

function displayTextBox() 
    { 
     var objElement = document.getElementById('addmed'); 
     addmed.style.display = 'block'; 
     addmed.style.visibility = 'visible'; 
    } 

    function hideTextBox() 
    { 
     var objElement = document.getElementById('addmed'); 
     addmed.style.display = 'none'; 
     addmed.style.visibility = 'hidden'; 
    } 

    function validate() 
    { 
     var arrElements = document.getElementsByName('medq'); 
     var objElement; 
     var boolContinue = false; 
     var objaddmedtext; 

     for(var i=0, _length=arrElements.length; i<_length; i++) 
     { 
      objElement = arrElements[i]; 

      if(objElement.checked) 
      { 
       if(objElement.id == 'yes') 
       { 
        objaddmedtext = document.getElementById('addmedtext'); 

        if(strTrim(objaddmedtext.value).length>0) 
        { 
         boolContinue = true; 
         break; 
        } 
       } 
       else 
       { 
        boolContinue = true; 
        break; 
       } 
      } 
     } 

     if(boolContinue) 
     { 
      alert('Continue, user completed the information.') 
     } 
     else 
     { 
      alert('Ask user to complete the data.') 
     } 
    } 

    /** 
    * Removes all white space characters from the string. 
    * 
    * @param: {String} String to trim. 
    * 
    * @return {String} Trimed string. 
    */ 
    function strTrim(strTrim) 
    { 
     return strTrim.replace(/^\s+|\s+$/g, ''); 
    } 

an diesem Javascript Sehen, ein Textfeld

<div id="addmed" style="display:none;visibility:hidden; margin-left:10px; width:110px;"> 
     <textarea id="addmedtext" cols="60" rows="6" placeholder="Please give details with dates"></textarea> 
</div> 

erscheint nur, wenn das Optionsfeld Ja für

<tr> 
<td width="33">1.</td> 
<td width="491">Heart or circulatory problems including: high blood pressure, heart attack, angina, heart murmur, heart failure, palpitations, circulatory problemseg. whitefinger, blocked arteries, stroke aneurysm.</td> 
<td width="68"><input name="medq" id="yes" type="radio" value="yes" onclick="displayTextBox()"/><label for="yes"> Yes </label></td> 
<td width="78"><input name="medq" id="no" type="radio" value="no" onclick="hideTextBox()"/><label for="no"> No </label></td> 
ausgewählt ist

Das ist aber nur 1 Frage ... Ich habe 18 weitere Fragen mit name="medq 1 to 18 ".

Irgendwelche Ideen, wie man das Javascript redigiert, um die Parameter hinzuzufügen?

+0

Eine Art Nebenkommentar: Wenn Sie einen * medizinischen * Fragebogen machen, bei dem die Gesundheit der Menschen beeinträchtigt sein könnte, würde ich Sie dringend bitten, äußerst strenge Tests durchzuführen, um sicherzustellen, dass Ihr Code korrekt ist. jede * Frage ja UND nein, für den Fall, dass zum Beispiel eine Frage immer mit Ja oder immer mit Nein wegen eines Fehlers markiert wird. – ninjagecko

+0

Als erstes wird ein "ja und nein Radio Button" als Checkbox bezeichnet. Dafür sind sie da.Zweitens müssen Sie die Inline-Größen- und Stildaten aus Ihrem HTML-Code extrahieren. Ich würde auch empfehlen, eine Bibliothek zu verwenden, die irgendeine Art von Selektor bereitstellt, wie zum Beispiel (aber nicht beschränkt auf) jQuery, um Nachrichten zu bekommen und zu verstecken. Wenn Sie keinen Selektor verwenden, stellen Sie sicher, dass getElementById verfügbar ist. – ssube

+0

kann jemand erklären, was 'f.style.display = 'blockiert'; f.style.visibility = 'sichtbar'; 'bedeutet? – Hubert

Antwort

1

Zuerst müssen Sie eine eindeutige ID auf jedem Optionsfeld haben. Aber Sie brauchen den gleichen NAME für jedes Paar der YES/NO-Taste, um das ausgewählte Paar zu verarbeiten. So können Sie jetzt

<input type="radio" name="foo" id="foo_y" value="yes" /><label for="foo_y">Yes</label> 
<input type="radio" name="foo" id="foo_n" value="no" /><label for="foo_y">Yes</label> 
<textarea id="foo_text" name="foo_text"><textarea> 

haben, für die "Ja" Radio-Buttons, können Sie Onclick = "displayTextBox (this)" hinzufügen. "Dies" ist ein Zeiger auf den aktuellen Radio-Button.

Sie können dann aktualisieren, um die Funktion wie folgt:

function displayTextBox(f) { // f is the field that was clicked 
    f.style.display = 'block'; 
    f.style.visibility = 'visible'; 
}

Jetzt ist es eine generische Funktion. Machen Sie das Gleiche für die "Verbergen" -Funktion.

Schließlich können Sie Ihre Validierungsfunktion aktualisieren, um eine Schleife über das Array von Formulareingabefeldern zu machen, anstatt das eine Feld zu betrachten.

  1. var arrElements = document.getElementsByTagName("input");.
  2. Innerhalb Ihrer Schleife: .
  3. nicht if(objElement.id == 'yes') verwenden, überprüfen Sie für den Wert des aktuellen Feldes: if(objElement.value == 'yes')
  4. Schließlich Sie den Text aus dem zugehörigen Textfeld greifen: objTextArea = document.getElementByName(objElement.name + "_text");

Also, Sie machen nur jeweils Die vorhandenen Funktionen sind generisch und suchen nach den Metadaten jedes Feldes, anstatt zu versuchen, für jedes Feld zu codieren.

+0

hi ... sorry will nur verstehen, was meinst du mit field das war click ?? Du meinst den Wert? – Hubert

+0

für das feld zu klicken meinst du die 19 felder? – Hubert

+0

nach der Implementierung der Änderungen ... ich realisiere, dass, wenn für Frage 1 ich klicke nein, für qns 2 ich klicke ja das Textfeld herauskommen und wenn qns 3 ich klicke nein das Textfeld wird wieder verstecken ... jede Idee, wie machen wie wenn mindestens 1 ja ist dann Textfeld bleibt da? – Hubert