Доступ к элементу
Я получаю данные из 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, время: 03:21. |