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

你在你的脚本中引用一个表单元素,你定义了一个表单吗?

答案似乎在这里得到解决 Attach event listener through javascript to radio button

于 2013-03-06T19:18:37.480 回答
1

我的回答是假设您希望<textarea>填充类似于以下内容的文本:

用户对问题 A 回答了 1

用户对问题 F 回答了 2

为了让AF回传,我需要通过以下方式修改您的 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将包含每组的特殊答案字符串。

现在让我们创建两个答案组对象:

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