Доступ к элементу
Я получаю данные из xml документа сам вопрос и ответы,чтобы в дальнейшем можно было легко редактировать тесты под определенную задачу.Мой вопрос стоит в том,как получать из xml документа правильные ответы в виде rating допустим,или же как-то ище,и как мне теперь доступатса до элементов в функции ?
var inputs = document.getElementsByTagName('input');
До этого я создавал checkbox в самом javascript <p><label><input type="checkbox">19</label></p> и зделать что бы все работало коректно? И со временем назрел ище один вопрос,выступает ли rating="0" или 1 в xml файле как True или False или это просто числа? Код:
<test>
<html>
<head>
<meta charset="utf-8" />
<title>translotor</title>
<script type="text/javascript" src="jquery.js"></script>
<script src="script.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
$.ajax({
type: "GET", // метод передачи данных, можно пропутсить - по умолчанию и так get
url: "test.xml", // путь к файлу, который будем читать
dataType: "xml", // тип данных, с котрыми работаем
success: vasa
});
function vasa(xml) { // переменная названа xml. ее можно назвать как либо по другому
answer=$(xml).find('answer')[0].textContent;
$('.cont').append('<p><label><input type="checkbox">'+answer+'</label></p>');
answer=$(xml).find('answer')[1].textContent;
$('.cont').append('<p><label><input type="checkbox">'+answer+'</label></p>');
answer=$(xml).find('answer')[2].textContent;
$('.cont').append('<p><label><input type="checkbox">'+answer+'</label></p>');
answer=$(xml).find('answer')[3].textContent;
$('.cont').append('<p><label><input type="checkbox">'+answer+'</label></p>');
}
});
$(document).ready(function(){
$.ajax({
type: "GET"
url: "test.xml"
dataType: "xml"
success: vopros
});
function vopros(xml) {
question=$(xml).find('question')[0].textContent;
$('.onix').append('<p><label><h4>'+question+'</h4></label></p>');
}
});
var answer=[1,3];
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.indexOf(i + 1) !== -1;
if (checked !== right){
error=true;
break;
}
}
var output = document.getElementById('output');
output.value=error ? 'oshibka' : 'za4et';
return false;
}
</script>
</head>
<body>
<form onsubmit="return checkAnswer()">
<div class='onix'></div>
<div class='cont'></div>
<p><button type="submit">Готово</button> <button type="reset">Сбросить</button></p>
<p><textarea id="output" readonly></textarea></p>
</form>
</body>
</html>
|
Цитата:
А зачем два раза делать запрос с xml? Убери второй, а функции-callback'и, обрабатывающие ответ - объедини в одну (вопрос сунь в васю) И в васе конкретный быдлокод. Для этого существуют циклы! Или each! Заводим массив с правильными ответами, и ложим туда их.
// это в самом начале скрипта, в области видимости обеих функций - и васи и чекансэ
var answer = {};
//
var answerNodes = $(xml).find('answer');
answers.each(function(index){//тут не помню порядок аргументов, может index - второй, смотри //api.jquery.com/each/
var answer = this.textContent;
var rating = +this.getAttribute('rating'); // плюс приводит строку к числовому типу
$('.cont').append('<p><label><input type="checkbox">'+answer+'</label></p>');
answer[index] = rating;
});
А проверять так: var right = answer[i] == 1; |
этот код
var answer = $(xml).find('answer');
answers.each(function(index){
var answer = this.textContent;
var rating = +this.getAttribute('rating'); // плюс приводит строку к числовому типу
$('.cont').append('<p><label><input type="checkbox">'+answer+'</label></p>');
answer[index] = rating;
});
это коректная замена всему быдлокоду который был в васи? должно быть так?но тогда оно не работает,или я совсем уже чайник(
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>translotor</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>');
var answerNodes = $(xml).find('answer');
answers.each(function(index){
var answer = this.textContent;
var rating = +this.getAttribute('rating');
$('.cont').append('<p><label><input type="checkbox">'+answer+'</label></p>');
answer[index] = rating;
});
}
});
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;
}
}
var output = document.getElementById('output');
output.value=error ? 'oshibka' : 'za4et';
return false;
}
</script>
</head>
<body>
<form onsubmit="return checkAnswer()">
<div class='cont'></div>
<p><button type="submit">Answer</button> <button type="reset">Clear</button></p>
<p><textarea id="output" readonly></textarea></p>
</form>
</body>
</html>
|
там answers надо в answerNodes переименовать (или наоборот). Я забыл это сделать.
|
я пробавал ище вреча менять answerNodes на answer и все равно ничего не происходит.Не создаютса эти чекбоксы.
А вообще начало как-то странно работать,то создаётса чекбоксы то нет,даже былокодом.и я вообще непойму что проихошло Пишет Uncaught SyntaxError: Unexpected identifier |
Цитата:
|
Понимаете как-бы эта строка у меня некогда и неменялась со вчерашнего дня это строка
url: "test.xml" и выдаёт ошибку если я начиную что либо мзменять и пытатса исправить код,так как открываю предыдущию не исправленую веррсию кода которую я копировал и она работает коректно,ну тоесть создает чекбоксы |
А запятые моя бабушка расставит за тебя?
|
answer[index] = rating; А почему именно так присваивать?тогда же в ансвер будет хранитса все варианты ответов 20 20.5 40 50 и тому подобное,а не в значениях 0 или 1?
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;
}
}
var output = document.getElementById('output');
output.value=error ? 'oshibka' : 'za4et';
return false;
}
И функция проверки остаётса такаяже?Так как тогда в answer[i] будет хранитса символ чисел 20 40 50 20.5 по его номеру или нет? |
Откуда тут уже числа 20 40 50 ?
|
| Часовой пояс GMT +3, время: 05:31. |