чё за прикол с radiobutton
Ам даже незнаю что спросить...Создаю вроде как radio а работает как с checkbox.Подскажите почему и што я должен исправить?
<html> <head> <meta charset="utf-8" /> <title>Test</title> <script type="text/javascript" src="jquery.js"></script> <script src="script.js" type="text/javascript"></script> <script type="text/javascript"> var answer={} $(document).ready(function(){ $.ajax({ type: "GET", url: "test.xml", dataType: "xml", success: vasa }); function vasa(xml) { question=$(xml).find('question')[0].textContent; $('.cont').append('<p><label><h4>'+question+'</h4></label></p>'); TextButton=$(xml).find('TextButton')[0].textContent; $('.onki').append('<p><label><h4>'+TextButton+'</h4></label></p>'); TextButton=$(xml).find('TextButton')[1].textContent; $('.lolki').append('<p><label><h4>'+TextButton+'</h4></label></p>'); ResultTextTrue=$(xml).find('ResultTextTrue')[0].textContent; ResultTextFalse=$(xml).find('ResultTextFalse')[0].textContent; var answers = $(xml).find('answer'); answers.each(function(index){ var a = this.textContent; var rating = +this.getAttribute('rating'); $('.cont').append('<p><label><input type="radio">'+a+'</label></p>'); answer[index] = rating; }); } }); function checkAnswer() { var error = false; //Прохожу по всем radio(так как создались они) var inputs = document.getElementsByTagName('input'); for(var i = 0; i < inputs.length ; i++){ //проверяю где ставитса отметка var checked = inputs[i].checked; var right = answer[i] == 1; if (checked !== right){ error=true; break; } } output.value=error ? ''+ResultTextFalse+'' : ''+ResultTextTrue+''; return false; } </script> </head> <body> <form onsubmit="return checkAnswer()"> <div class='cont'></div> <p><button type="submit"><div class='onki'></div></button> <button type="reset"><div class='lolki'></div></button></p> <p><textarea id="output" readonly></textarea></p> </form> </body> </html> |
Ты не написал в чем собственно проблема.
|
Проблема собственно в том что можно выбирать как в чекбоксах несколько radio а не один как должно быть в radio
|
Vasy,
Чтоб радио объединить в группу - необходимо у данной группы иметь идентичный атрибут name |
Deff,
спасибо,нада походу пойти отдохнуть а то я впритык не вижу элементарной ошибки |
Ну суть проблемы такова,я немного недопонимаю скорее всего где што будет хранитса.Есть код
<?xml version="1.0" encoding="windows-1251"?> <?xml-stylesheet href="style.css" type="text/css"?> <!DOCTYPE test SYSTEM "test.xml"> <test> <style border="5px solid black" hight="350px" width="350px" padding="20px" margin="50px"></style> <questions> <single> <question>Вопрос</question> <answer rating="1"> Да</answer> <answer rating="0"> Нет</answer> </single> <question1>Вопрос</question1> <answer1 rating="0"> Да</answer1> <answer1 rating="1"> Нет</answer1> </questions> <TextButton>Ответить на вопрос</TextButton> <TextButton>Стереть ответы</TextButton> <ResultTextTrue>Ваш ответ верен!</ResultTextTrue> <ResultTextFalse>Ваш ответ не верен!</ResultTextFalse> </test> И код javascript <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Test</title> <script type="text/javascript" src="jquery.js"></script> <script src="script.js" type="text/javascript"></script> <script type="text/javascript"> var answer={} $(document).ready(function(){ $.ajax({ type: "GET", url: "test.xml", dataType: "xml", success: vasa }); function vasa(xml) { question=$(xml).find('question')[0].textContent; $('.cont').append('<p><label><h4>'+question+'</h4></label></p>'); TextButton=$(xml).find('TextButton')[0].textContent; $('.onki').append('<p><label><h4>'+TextButton+'</h4></label></p>'); TextButton=$(xml).find('TextButton')[1].textContent; $('.lolki').append('<p><label><h4>'+TextButton+'</h4></label></p>'); ResultTextTrue=$(xml).find('ResultTextTrue')[0].textContent; ResultTextFalse=$(xml).find('ResultTextFalse')[0].textContent; var answers = $(xml).find('answer'); answers.each(function(index){ var a = this.textContent; var rating = +this.getAttribute('rating'); $('.cont').append(' <input size=20 name="group1" type="radio">'+a+''); answer[index] = rating; }); question1=$(xml).find('question1')[0].textContent; $('.bond').append('<p><label><h4>'+question1+'</h4></label></p>'); var answers = $(xml).find('answer1'); answers.each(function(index){ var a = this.textContent; var rating = +this.getAttribute('rating'); $('.bond').append(' <input size=20 name="group2" type="radio">'+a+''); answer[index] = rating; }); var div = document.getElementById('id') var decoration = xml.querySelector('style'); div.style.border = decoration.getAttribute('border'); div.style.width = decoration.getAttribute('width'); div.style.height = decoration.getAttribute('hight'); div.style.padding = decoration.getAttribute('padding'); div.style.margin = decoration.getAttribute('margin'); } }); function checkAnswer() { var error = false; var inputs = document.getElementsByTagName('input'); for(var i = 0; i < inputs.length ; i++){ var checked = inputs[i].checked; var right = answer[i] == 1; if (checked !== right){ error=true; break; } } output.value=error ? ''+ResultTextFalse+'' : ''+ResultTextTrue+''; return false; } </script> </head> <body> <form onsubmit="return checkAnswer()"> <div id="id"> <div class='cont' ></div> <div class='bond'></div> </div> <p><button type="submit"><div class='onki'></div></button> <button type="reset"><div class='lolki'></div></button></p> <p><textarea id="output" readonly></textarea></p> </form> </body> </html> Скажите пожалуста на момент добавления второго блока ответов и вопросов в answer[index] = rating;што будет хранитса,как я понимаю то это же массив и при втором считывании ответов,туда добивтса как-бы второй верный ответ,правильно?тогда почему оно работает не коректно и всегда выдаёт что вы ответили неверно? Типа у меня есть две разные групы радиобаттонов ответы у обоих задаютса как rating="1" И получаетса что у второго вопроса правильного ответа как-бы нет,а у 1 правильный ответ есть.и в answer хранитса ответ только первого вопроса.Как будет коректно задавать правильные ответы. Или ошибка состоит в самой проверке? |
пытался организовать for по индексам,создавая массив ответов и засовывать туда rating ничево из этого хорошего не вышло
|
я так понимаю у меня беда уже здесь с логикой,правильно понимаю?
|
Сформулировал правильно вопрос.Скажите как нужно присваивать
answer[index] = rating; по другому,чтобы при следующем присваивании предыдущие данные оставались в answer{} |
Все уже получилось,пока ехал домой до меня дошло что я баран
Если у кого будет пожая беда то вот простое решение var answers = $(xml).find('answer'); answers.each(function(index){ var a = this.textContent; var rating = +this.getAttribute('rating'); var inputs = document.getElementsByTagName('input'); if(inputs.length<2) { $('.cont').append(' <input size=20 name="group1" type="radio">'+a+''); } else { $('.bond').append(' <input size=20 name="group2" type="radio">'+a+''); } answer[index] = rating; }); |
ну а теперь вопрос,который я несмог решить.
Как зделать так что бы на экране отображалось варианты ответов,тоесть Да Нет сверху а под ними были все радиобаттоны которые в свою очередь стоят напротив определенного вопроса? |
Часовой пояс GMT +3, время: 18:59. |