3

この簡単なスクリプトを質問表に添付しましたが、選択した回答をテキストエリアに表示するのに問題があります。スクリプトは次のとおりです。

function check() {
  var complete = 0;
  var total = 0;

  for (i=0;i<document.form.length;i++)
  {
     if (document.form.elements[i].checked == true && complete < 10) {
        complete++;
        total = (total) + (Math.round(document.form.elements[i].value));
     }
  }

  if (complete >= 10) {
     document.form.message.value = document.form.question1.value;
  }
}

そしてここにHTMLがあります:

<input type="radio" value="1" name="question1" onclick="check()"> A<br />
<input type="radio" value="2" name="question1" onclick="check()"> B<br />
<input type="radio" value="3" name="question1" onclick="check()"> C<br />
<input type="radio" value="4" name="question1" onclick="check()"> D<br />

<input type="radio" value="1" name="question2" onclick="check()"> E<br />
<input type="radio" value="2" name="question2" onclick="check()"> F<br />
<input type="radio" value="3" name="question2" onclick="check()"> G<br />
<input type="radio" value="4" name="question2" onclick="check()"> H<br />

<textarea name="message"></textarea>

値を返したいのですが、取得していundefinedます。テキストを返すスクリプトの行を次のように変更すると、次のようになります。

  document.form.message.value = document.form.question1;

取得し[object NodeList]ます。私はとても単純なものが欠けていることを知っていますが、私の人生のためにそれを見つけることができません。

また、AからHまでの文字を値と一緒に返すことはできますか?値を文字に置き換えることはできますが、計算には数字が必要です。

4

5 に答える 5

1

私の答えは、次のような<textarea>テキストが入力されることを前提としています。

ユーザーは質問 A に対して 1 と答えました

ユーザーは質問 F に対して 2 と答えました

AまたはFが返されるようにするには、次の方法で html を変更する必要がありました。

<input type="radio" value="1" name="question1" onclick="check(this, 'A')"> A<br />
<input type="radio" value="2" name="question1" onclick="check(this, 'B')"> B<br />
<input type="radio" value="3" name="question1" onclick="check(this, 'C')"> C<br />
<input type="radio" value="4" name="question1" onclick="check(this, 'D')"> D<br />

<input type="radio" value="1" name="question2" onclick="check(this, 'E')"> E<br />
<input type="radio" value="2" name="question2" onclick="check(this, 'F')"> F<br />
<input type="radio" value="3" name="question2" onclick="check(this, 'G')"> G<br />
<input type="radio" value="4" name="question2" onclick="check(this, 'H')"> H<br />

<textarea name="message"></textarea>

そうしないと、手紙と無線入力の間に実際の接続がありません。

とにかく、これが私がやったことです:

各グループが同じ機能を繰り返していることに気付いたので、単一のオブジェクト コンストラクターを作成しました。

var Answer = function () {
    this.text = '';
};

this.textグループごとに特別な回答文字列が含まれます。

次に、2 つの回答グループ オブジェクトを作成します。

var answerOne = new Answer();
var answerTwo = new Answer();

次はcheck()、入力要素とそれに関連付けられた応答文字を渡す関数です。

var check = function (_input, _question) {
    if (_input.name === "question1") {
        answerOne.text = "User answered " + _input.value + " for Question " + _question + "\n";
    }
    if (_input.name === "question2") {
        answerTwo.text = "User answered " + _input.value + " for Question " + _question + "\n";
    }
    document.getElementsByName('message')[0].value = answerOne.text + answerTwo.text;
};

これで、ユーザーが回答を選択すると、他のグループの回答文字列に影響を与えることなく、適切な回答グループの文字列が適宜更新されます。

これが動作するjsfiddleです:http://jsfiddle.net/smokinjoe/uC76f/13/

それが役立つことを願っています!

于 2013-03-07T17:57:01.017 に答える
1

スクリプトでフォーム要素を参照していますが、フォームを定義していますか?

答えはここで対処されているようです javascriptを介してイベントリスナーをラジオボタンにアタッチします

于 2013-03-06T19:18:37.480 に答える
0

これで完全なソリューションが完成しました。

コードでいくつか問題が発生しました。1. ラジオ グループから値を取得する方法。反復して、チェックされているものを見つける必要があります。 2. textarea に値を設定します。あなたがする必要がありますgetElemenetsByName[x]

<script>
function check() {
  var complete = 0;
  var total = 0;

    var x = document.getElementsByTagName('input');
    for(var k=0;k<x.length;k++){

            if (x[k].checked && complete < 10) {
                complete++;
                total = total + Math.round(x[k].value);
            } 

    }    

    (document.getElementsByName('message')[0]).value = total;       
}


</script>
<input type="radio" value="1" name="question1" onclick="check()"> A<br />
<input type="radio" value="2" name="question1" onclick="check()"> B<br />
<input type="radio" value="3" name="question1" onclick="check()"> C<br />
<input type="radio" value="4" name="question1" onclick="check()"> D<br />

<input type="radio" value="1" name="question2" onclick="check()"> E<br />
<input type="radio" value="2" name="question2" onclick="check()"> F<br />
<input type="radio" value="3" name="question2" onclick="check()"> G<br />
<input type="radio" value="4" name="question2" onclick="check()"> H<br />

<textarea name="message"></textarea>
于 2013-02-28T19:42:09.217 に答える
0

これはラジオ ボタンであるため、すべての値をループして、選択されている値を見つける必要があります。このようなものが動作するはずです:

for (var i=0; i < document.form.question1.length; i++)
   {
   if (document.form.question1[i].checked)
      {
       document.form.message.value = document.form.question1[i].value;
      }
   }
}
于 2013-02-28T19:42:49.267 に答える
0

これはテストしていません。フォームの名前 (または ID) や、ドキュメントに含まれるフォームの数がわからないため、ID でフォームを参照しました。

function check() {
    var complete = 0;
    var total = 0;
    var formId = 'EnterYourFormId';  // This could be passed as a paramter to the function instead (e.g. "function check(formId) {")
    var _from = document.getElementById(formId);  // The form could also be referenced by it's index, e.g. document.forms[0]

    for (i=0; i < _from.elements.length; i++) {
        if (_from.elements[i].type=='checkbox' && _from.elements[i].checked && complete < 10) {
            complete++;
            total = total + parseInt(_from.elements[i].value);
        }
     }

     if (complete >= 10) {
         _form.message.value = _form.question1.value;
     }
}
于 2013-03-06T17:03:03.397 に答える