2013-02-28 7 views
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 вместе со значением? Я знаю, что могу заменить значение буквами, но там нужны цифры для расчетов.

+0

Вы действительно ищете прямое решение для javascript, или библиотека, подобная jquery, будет приемлемой? –

+0

Я бы не возражал против решения jquery, но я действительно новичок в javascript, и это может быть немного над моей головой, поэтому, если возможно, я бы предпочел прямой javascript. – thequerist

ответ

1

Мой ответ будет в предположении, что вы хотели бы <textarea> заселяться с текстом, аналогичным:

Пользователь ответил 1 для Вопроса A

Пользователь ответил 2 для F Вопрос

Чтобы получить или 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 будет содержать специальную строку ответа за группа.

Теперь давайте создадим объекты группы два ответа:

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/

Надежда, что помогает!

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

Может ли нижестоящий избиратель разрешить причину, известную для downvote? – hop

+0

@ thequerist. Я получаю надлежащие значения с этим. Ты пробовал? – hop

+0

Я тоже не спускал с тебя никого (мне тоже интересно об этом). Я просто попробовал. На самом деле он делает что-то еще (суммируя значения), которые я выводил в другое поле. То, что я хочу, это вернуть «вы ответили А на вопрос 1, F для второго вопроса» и так далее. Я думаю, что то, что вы предложили в своем первом проекте, приблизило меня к этому, но у меня все еще были трудности с выяснением того, как указать, что ответил человек за каждый вопрос. – thequerist

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; 
     } 
    } 
} 
+0

Разум для downvote был бы оценен и здесь. –

+0

Я не спустил вас вниз, но я все еще не знаю. – thequerist

0

не испытал это, и я не знаю, имя (или идентификатор) вашего вида (ов), или в самом деле, сколько формы у вас есть в вашем документе, у меня есть ссылается на вашу форму по ее идентификатору.

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; 
    } 
} 
Смежные вопросы