2012-04-02 2 views
0

宣言:パラメータであるかどうかわかりません。教えてください。このjavascriptのパラメータ数を増やすにはどうすればよいですか?

私はほぼ19のラジオボタンが付いた医療アンケートフォームを持っています。各質問のラジオボタンは、機能させるためには一意の入力名が必要です。はいラジオボタンを選択した場合、テキストエリアを切り替えるのに適したコードを見つけることができますが、入力名の1つでしか動作しない場合があります。

私の主な質問は:

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, ''); 
    } 

は、このJavaScriptでテキストエリア

<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> 
を探し

はい]ラジオボタンを

<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> 

のために選択されている場合のみ表示されます

しかし、これは1つの質問に過ぎません...私はname="medq 1 to 18 "と18の質問があります。

JavaScriptを編集してパラメータを追加する方法はありますか?

+0

人の健康に影響を及ぼす可能性のある*医療*アンケートを行っている場合は、あなたのコードが正しいことを確認するために非常に厳しいテストを行うことを強くお勧めします(つまり*それぞれの*はいはい、いいえ、例えば、問題が常にイエスとマークされたり、バグのためにいつもノーとマークされたりすることがあります。 – ninjagecko

+0

まず、「はい、いいえラジオボタン」をチェックボックスといいます。それがそれらのためのものです。次に、HTMLのインラインサイジングとスタイルデータを取得する必要があります。また、メッセージの取得と非表示のためにjQuery(ただしこれに限定されない)のようなセレクタを提供するライブラリを使用することをお勧めします。最後に、セレクタを使用しない場合は、getElementByIdが使用可能であることを確認してください。 – ssube

+0

誰かが 'f.style.display = 'block'とは何かを説明することができます。 f.style.visibility = 'visible'; 'はどういう意味ですか? – Hubert

答えて

1

まず、すべてのラジオボタンで一意のIDを持つ必要があります。しかし、選択したペアを処理するには、YES/NOボタンの各ペアに同じNAMEが必要です。あなたが持つことができる

<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> 

"はい"ラジオボタンの場合は、onclick = "displayTextBox(this)"を追加できます。 "this"は現在のラジオボタンへのポインタです。

あなたはそのようにのような機能を更新することができます。

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

は、今では一般的な機能です。 「隠す」機能についても同じ操作を行います。

最後に、1つのフィールドを見るのではなく、フォーム入力フィールドの配列をループするように検証関数を更新することができます。

  1. var arrElements = document.getElementsByTagName("input");
  2. ループ内:if((objElement.type === "radio") && (objElement.checked)) {
  3. は、if(objElement.id == 'yes')を使用する現在のフィールドの値を確認しない:if(objElement.value == 'yes')
  4. 最後に、あなたは、関連するテキストエリアからテキストをつかむことができます。objTextArea = document.getElementByName(objElement.name + "_text");

ので、あなただけのそれぞれを作っています各フィールドのコードを作成するのではなく、既存の関数が汎用的で、各フィールドのメタデータを探します。

+0

こんにちは...申し訳ありませんが、ちょうどクリックしたフィールドで何を意味しているのか理解したいですか?あなたは値を意味しますか?クリックするフィールドのための – Hubert

+0

あなたは19のフィールドを意味しますか? – Hubert

+0

変更を実装した後...質問1の場合はnoを、qns 2の場合はyesをクリックし、テキストフィールドは出てきたらqns 3をクリックしてもテキストフィールドが再び表示されなくなります。それは少なくとも1がはいならテキストボックスがそこに残るかどうかのようなものですか? – Hubert

関連する問題