Вход

Просмотр полной версии : Проблема с IE 9


Vasy
26.03.2013, 13:20
Есть код
<html>

<head>



<meta charset="utf-8" />
<title>Test</title>

<script type="text/javascript" src="jquery.js"></script>


<script type="text/javascript">



var g_xml;
$(document).ready(function(){

$.ajax({
type: "GET",
url: "test.xml",
dataType: "xml",
success: vasa
});

var button2 = document.getElementById("id2");
button2.style.display='none';
var button3 = document.getElementById("id3");
button3.style.display='none';
function vasa(xml) {
ResultTextTrue=$(xml).find('ResultTextTrue').text( );
ResultTextFalse=$(xml).find('ResultTextFalse').tex t();
attemptsanswer=$(xml).find('attemptsanswer').text( );

g_xml=xml;
html='';
item=$(xml).find('questions').children();
for(i=0; i<$(item).length; i++){
html=html+"<div class='question' value='"+i+"'>";
variant='';
element=$(item).eq(i).children();
k=0;
title="<p>"+$(element)[0].textContent+"</p>";
ans=$(element).eq(1).children();
for(j=0; j<$(ans).length; j++){
variant=variant+"<input type='radio' value='"+k+"' name='question"+i+"'>"+$(ans)[j].textContent;
k++;
}
k=0;
html=html+title+variant+"</div>";
}
$('#queston').html(html);

var div = document.getElementById('divi');
//var decoration = xml.querySelector('style');
div.style.border = $(xml).find('style').attr('border');
div.style.width = $(xml).find('style').attr('width');
div.style.height = $(xml).find('style').attr('hight');
div.style.padding = $(xml).find('style').attr('padding');
div.style.margin = $(xml).find('style').attr('margin');
div.style.position = $(xml).find('style').attr('position');
}


});
var pressed=0;
var pressed1=0;

function checkAnswer(){

q=$('#form').find('.question');
for(i=0; i<$(q).length; i++){
q_value=$(q).eq(i).attr('value');
value=$(q).eq(i).find('input:checked').attr('value ');
rating=$(g_xml).find('questions').children().eq(q_ value).children().eq(1).children().eq(value).attr( 'rating')
ans=$(g_xml).find('questions').children().eq(q_val ue).children();
text=$(ans).find('[rating="1"]').text()
if(rating==1){
//alert($(q).eq(i).find('p').text()+" - good ("+text+")");
output.value=ResultTextTrue;

}else{
// alert($(q).eq(i).find('p').text()+" - bad ("+text+")");
output.value=ResultTextFalse;


}

}

if(pressed<attemptsanswer)
{

document.getElementById('meow').innerHTML = ++pressed;
// alert(pressed);

}
else
{


pressed=0;
var button = document.getElementById("send");
button.style.display='none';
var button1 = document.getElementById("id1");
button1.style.display='none';
var button2 = document.getElementById("id2");
button2.style.display='';
button2.onclick = function(event){



button.style.display='';
button1.style.display='';
button2.style.display='none';




g=++pressed1;


if(pressed1>attemptsanswer)
{
button.style.display='none';
button1.style.display='none';
button2.style.display='none';
var button3 = document.getElementById("id3");
button3.style.display='';
// alert('ваши попытки закончились.Узнайте правильный ответ');
}




}



}

}
function TrueAnswer(){
for(i=0; i<$(q).length; i++){
q_value=$(q).eq(i).attr('value');
rating=$(g_xml).find('questions').children().eq(q_ value).children().eq(1).children().eq(value).attr( 'rating')
ans=$(g_xml).find('questions').children().eq(q_val ue).children();
text=$(ans).find('[rating="1"]').text();
output.value+=($(q).eq(i).find('p').text()+"("+text+")");
}
}


</script>

</head>
<body>


<div id='form'>
<p>На кнопочку тыкнуто: <span id="meow">0</span> раз.</p>
<div id="divi">
<div id="queston"></div>
</div>
<button id='send' name='send' onclick='checkAnswer()' >Проверить</button>
<button id="id1" type="reset">Стереть Ответы</button>
<button id="id2" type="reset">Начать тест заново</button>
<button id="id3" type="button" onclick="TrueAnswer()" >Показать правильный ответ</button>
<p style=" position:relative"><textarea id="output" readonly></textarea></p>
</div>



</body>

</html>
И IE ругаетса на строку item=$(xml).find('questions').children();
и говорит "Команда не поддерживается объектом".Что с этим можно поделать?Я так понимаю проблема не в children()? так как пишут что ,этот метод это была чисто для IE.Что тогда нетак подскажите пожалуста

ksa
26.03.2013, 15:57
Что с этим можно поделать?
Как вариант разбить на строки

item=$(xml);
item=item.find('questions');
item=item.children();
И посмотреть что именно "не нравится"...

animhotep
26.03.2013, 15:58
у меня Undefined variable: attemptsanswer пишет
выложи код на http://codepen.io/pen/ например

Vasy
26.03.2013, 16:07
ам ну ругаетса конкретно в строке
item=$(xml);


Если поменять item на любую другую переменную то работает(создаютса input и все остальное) но все текстовые поля обозначает как udentified.

Vasy
26.03.2013, 16:09
у меня Undefined variable: attemptsanswer пишет
выложи код на http://codepen.io/pen/ например

Ам если я вылаживаю,то получаетса что xml файл я не подгружаю.

Vasy
26.03.2013, 16:20
вот получилось выложить в песочницу
http://learn.javascript.ru/play/SPHlY

В песочнице во всех браузерах отображаетса так как нужно.Но когда запускаю локально то в IE все тектовые поля выдаёт как udentified

animhotep
26.03.2013, 20:03
локально $.ajax не должно работать, если у тебя веб сервера нету

Vasy
26.03.2013, 21:18
локально $.ajax не должно работать, если у тебя веб сервера нету

ну я не совсем глупый как ты обрисовал.Я использую wamp.
Так я собственно немогу понять,почему если в песочнице все работает и создаётса коректно и IE,то почему локально нехочет работать?Ну тоесть когда я подргружаю xml файл с сервера.

Vasy
27.03.2013, 13:57
мучался вчера и севодня так и непонял,почему в песочнице все ок,а когда подгружаю xml файл как с сервера то все текстовые поля udentified?
подскажите пожалуста как это исправить?

Vasy
27.03.2013, 15:06
Нашол в чем проблема.Но немогу ёё решить.В строках
variant=variant+"<input id='radio' type='radio' value='"+k+"' name='question"+i+"'>"+$(ans)[j].textContent;
title="<p>"+$(element)[0].textContent+"</p>";

textContent в IE выдаёт udentified его нужно менять на text()
делаю это так title="<p>"+$(element)[0].text()+"</p>";
но тогда совсем ничево не создаётса,если ставлю просто text то в любом браузере кроме IE в месте текста стоит udentified.Как с этим боротса?
Пробовал делать так,для проверки
textquestion=$(element)[0].text();
title="<p>"+textquestion+"</p>";
Собственно не создаётса совсем ничево,и я так полагаю дело в text().Его здесь что нельзя использовать?Но везде пишут что text() не будет работать если его использовать с <input> а он с <input> в моём коде не заимодействует же.



И столкнулса с ище одной проблемой.Переделал немного код и теперь он выглядит так
<form id="form" onsubmit="return false">


<div id="divi">
<div id="queston"></div>
</div>
<button id='send' name='send' onclick="checkAnswer()">Проверить</button>
<button id="id1" type="reset">Стереть Ответы</button>
<button id="id2" type="reset">Начать тест заново</button>
<button id="id3" onclick="TrueAnswer()" >Показать правильный ответ</button>
<p style=" position:relative"><textarea id="output" readonly></textarea></p>

</form>
Но так IE нехочет реагировать на нажтие кнопки Проверить.А с изначальным кодом который я сбрасывал все работало нормально.В чем проблема?И да в этой строке тоже менял когда с формой то так.
q=$('form').find('.question');

Ну либо же подскажите как сделать так что-бы убирать отмеченый radiobutton?Ну тоесть если писать функцию
function reset(){
output.value='';
}
и вызывать ёё здесь
<div id="form">


<div id="divi">
<div id="queston"></div>
</div>
<button id='send' name='send' onclick='checkAnswer()' >Проверить</button>
<button id="id1" onclick='reset()'>Стереть Ответы</button>
<button id="id2" onclick='reset()'>Начать тест заново</button>
<button id="id3" onclick="TrueAnswer()" >Показать правильный ответ</button>
<p style=" position:relative"><textarea id="output" readonly></textarea></p>

</div>

Vasy
27.03.2013, 15:30
подскажите подалуста что с этим делать,я уже перепробовал все что знал.
Проблему обрисовал в последнем сообщении прошлой страниуц.Подскажите пожалуста как пожстроитса под этот долбаный IE

Vasy
27.03.2013, 17:17
Проблему с формой решил.Некак немогу решить проблему с TextContent

С <form> проблему решил так,забыл что в IE ему все нужно задавать явно.В месте вывода в текстовое поле нужно явно указывать куда выводить,вот так
var u=document.getElementById('output');
u.value=ResultTextTrue;
а не
output.value=ResultTextTrue;

Подскажите как решить проблему с TextContent.Почему когда в коде textContent меняю на text(),то все перестаёт работать?Как мне заменить TextContent чтобы все работало как в IE так и в других браузерах?

Либо же если нету решения проблемы про <TextContent> подскажите пожалуста как можно обрабатывать браузер с какого зашол пользователь,и в зависимости с какого браузера он зашол,выполнялся разный код?Я нашол просто как определять браузер с какого челвоек зашол,а как использовать разные варианты кодов,в зависимости от того с какого браузера зашли?

вот закинул код в пеочницу http://learn.javascript.ru/play/rOSFK

Vasy
28.03.2013, 01:09
решил проблему тем что просто проверяю какой браузер я использую.Если у кого-то будет подобная проблема то вот самый обычный код проверки.
var ua = navigator.userAgent;
if (ua.search(/MSIE/) > 0){
//код который использовать в IE
}
else{
//код который использовать во всех остальных браузерах.
}

Но у меня есть ище вопрос.Мне подсказали кто сталкивался с проблемами парсинга,что стоит здесь $.ajax({
type: "GET",
url: "test.xml",
dataType: "xml",
dataType использовать не как xml а text и потом преобразовывать в xml я не совсем понял,что значит преобразовывать в xml,Вы немогли бы пояснить?

danik.js
28.03.2013, 07:48
$(element)[0].text()
Так $(element)[0] - это DOM-элемент, а не jQuery. У элементов нет метода text()
Нужно так: $(element).eq(0).text()

Сниффинг строки useragent - неблагодарное дело.
Лучше уж так:
var text = element[('textContent' in element) ? 'textContent' : 'text'];

Ну либо же подскажите как сделать так что-бы убирать отмеченый radiobutton?

radio.checked = false;

Или вызывай form.reset() - это сбросит все значения формы автоматически.

danik.js
28.03.2013, 07:49
Вы немогли бы пояснить?
А не мог бы пояснить зачем так делать?

Vasy
28.03.2013, 15:07
Спасибо за ответ про DOM-элемент.Я уже вчера ближе к ночи понял что я хочу зделать невозможное.Буду знать.

Но не сосем понял про это
var text = element[('textContent' in element) ? 'textContent' : 'text'];

вы имеете ввиду что использовать
var ua = navigator.userAgent;
Несовсем хорошо?А почему так?

А как использовать ту строку который дали вы в моём коде?

А ище возник такой вопрос.Это же не столь важно,что xml документ в кодировке encoding="windows-1251"
а html <meta charset="utf-8" />?
Потомучто человек говорит что нужно xml документ пересохранить в UTF-8 и убрать encoding="windows-1251"
и у него все работает в IE с TextContent.А я проделываю ту же операцию и у меня всеравно текст не отображаетса в IE с TextContent.Что это может быть?

danik.js
28.03.2013, 23:33
Что это может быть
Не знаю. Я пробовал - все работает. Нужен тестовый пример. Выложите в песочнице.

Vasy
28.03.2013, 23:53
делаю вот так вот.
http://learn.javascript.ru/play/FDXNY

И я немного в шоке,код остался точно тотже,но утром у меня ничево не отображало,а сейчас отображает коректно?И я непойму почему так?

И ище возник такой вопрос,если допустим xml документ размещен в какойто другой папке,то путь ему указывать в url как допустим C://wamp/ну и так далее?Ну тогда оно нехочет работать.Как правильно нужно писать url если xml размещать в какой-то другой папке?

И ище столкнулся с бедой,меняю какието названия или ище что-то сохраняю.во всех браузерах все меняетса а в IE какаета хрень все файлы хранят прошлые данные?че за хрень?

danik.js
29.03.2013, 00:08
Не путай виртуальный url (локатор) с реальным path в файловой системе до файла.
Ты хоть раз видел сайты с адресом вроде C://google.com ??? Нет? Ну так че городишь?

Vasy
29.03.2013, 01:07
Ну так я и спрашиваю,как мне подключать xml документ если он находится где-то в другой папке допустим?
Типа вот так?
url: "http://localhost/test.xml",
Спасибо большое вам за помощь

danik.js
29.03.2013, 09:20
Типа вот так?
url: "http://localhost/test.xml",

Ну типа так. Только можно путь можно указать относительно домена:
url: '/test.xml'

Vasy
29.03.2013, 17:41
Ну типа так. Только можно путь можно указать относительно домена:
url: '/test.xml'

понял спасибо