Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.03.2013, 01:55
Профессор
Отправить личное сообщение для Vasy Посмотреть профиль Найти все сообщения от Vasy
 
Регистрация: 09.02.2013
Сообщений: 165

Доступ к элементу
Я получаю данные из 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>
	<questions>
		<check>
		<question>Вопрос</question>
		<answer rating="1"> 20</answer>
		<answer rating="0"> 40</answer>
		<answer rating="0"> 50</answer>
		<answer rating="1"> 20,5</answer>
		</check>
		
	</questions>
</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>

Последний раз редактировалось Vasy, 06.03.2013 в 03:59.
Ответить с цитированием
  #2 (permalink)  
Старый 06.03.2013, 04:49
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Vasy
ли rating="0" или 1 в xml файле как True или False или это просто числа
В xml нет типов данных. Все атрибуты - просто строки.

А зачем два раза делать запрос с 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;
Ответить с цитированием
  #3 (permalink)  
Старый 06.03.2013, 07:12
Профессор
Отправить личное сообщение для Vasy Посмотреть профиль Найти все сообщения от Vasy
 
Регистрация: 09.02.2013
Сообщений: 165

этот код
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>

Последний раз редактировалось Vasy, 06.03.2013 в 15:35.
Ответить с цитированием
  #4 (permalink)  
Старый 06.03.2013, 07:26
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

там answers надо в answerNodes переименовать (или наоборот). Я забыл это сделать.
Ответить с цитированием
  #5 (permalink)  
Старый 06.03.2013, 15:24
Профессор
Отправить личное сообщение для Vasy Посмотреть профиль Найти все сообщения от Vasy
 
Регистрация: 09.02.2013
Сообщений: 165

я пробавал ище вреча менять answerNodes на answer и все равно ничего не происходит.Не создаютса эти чекбоксы.
А вообще начало как-то странно работать,то создаётса чекбоксы то нет,даже былокодом.и я вообще непойму что проихошло

Пишет Uncaught SyntaxError: Unexpected identifier

Последний раз редактировалось Vasy, 06.03.2013 в 16:01.
Ответить с цитированием
  #6 (permalink)  
Старый 06.03.2013, 16:05
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Vasy
Пишет Uncaught SyntaxError: Unexpected identifier
Ага, а номер строки держит в тайне? Ну че смеяться - рядом с ошибкой указывается номер строки, неужто трудно посмотреть на эту строку и исправить ошибку?
Ответить с цитированием
  #7 (permalink)  
Старый 06.03.2013, 16:10
Профессор
Отправить личное сообщение для Vasy Посмотреть профиль Найти все сообщения от Vasy
 
Регистрация: 09.02.2013
Сообщений: 165

Понимаете как-бы эта строка у меня некогда и неменялась со вчерашнего дня это строка
url: "test.xml"

и выдаёт ошибку если я начиную что либо мзменять и пытатса исправить код,так как открываю предыдущию не исправленую веррсию кода которую я копировал и она работает коректно,ну тоесть создает чекбоксы

Последний раз редактировалось Vasy, 06.03.2013 в 16:17.
Ответить с цитированием
  #8 (permalink)  
Старый 06.03.2013, 16:16
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

А запятые моя бабушка расставит за тебя?
Ответить с цитированием
  #9 (permalink)  
Старый 06.03.2013, 16:35
Профессор
Отправить личное сообщение для Vasy Посмотреть профиль Найти все сообщения от Vasy
 
Регистрация: 09.02.2013
Сообщений: 165

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 по его номеру или нет?
Ответить с цитированием
  #10 (permalink)  
Старый 06.03.2013, 16:54
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Откуда тут уже числа 20 40 50 ?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доступ к родительскому элементу по дочернему Кирюха =) jQuery 24 13.06.2018 12:22
Доступ к элементу по имени переменной sanyomix Общие вопросы Javascript 2 28.12.2012 11:31
Выборка((( получить доступ к дочернему элементу denfer12 Общие вопросы Javascript 1 13.08.2012 15:46
Как получить доступ к элементу vladimircape jQuery 2 29.02.2012 17:01
Получить доступ к элементу полученному через ajax Neokortex jQuery 10 14.01.2011 16:27