Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   InnerHTML & IE (https://javascript.ru/forum/css-html-internet-explorer/3804-innerhtml-ie.html)

Лесной_Белк 25.05.2009 13:51

InnerHTML & IE
 
Народ, подскажите плз в чем может быть проблема:

ИЕ выдает неизвестную ошибку. номер строки нереальный. методом алерта нашел, что ошибка вылетает в строке

$.post('selectApplication.php', {contractor:contractorValue}, function date(text){result=text; var target = document.getElementById("appDiv");target.innerHTML = text;});

в ФФ все арботает прекрасно, т.е. все библиотеки подключены, и все четко фунциклирует. Подскажите плз, из-за чего может ругаться ИЕ?
причем еслм алертом выводить text, который возвращает selectApplication.php, то внутри процедуры date алерт не работает, а после процедуры пишет что undefined =(

x-yuri 26.05.2009 01:02

или contractorValue не определена, или возникают ошибки при отправке запроса (например, selectApplication.php не найден)

Цитата:

а после процедуры пишет что undefined
так и должно быть

p.s. не стоит создавать лишних ненужных глобальных переменных (без var создается глобальная переменная):
var result = text; // хотя непонятно, зачем вообще эта переменная

p.p.s. если нужнопередать параметры:
$.post('selectApplication.php', {data:{contractor:contractorValue}}...

sonic13 28.10.2010 17:11

Подстава от IE
 
а у меня вот такой баг в IE все прекрасно работает под все остальные браузеры.
получаю содержимое <select></select> аякс запросом(но не суть важно)

потом присваиваю вот так:
getObj(div).innerHTML= request.responseText;

при этом смотрю отладчиком после выполнения этой команды устанавливаются следующие значения (getObj(div) - моя функция для получения объекта, работает нормально, без нее тоже самое.)


request.responseText =
"<option>-----</option>
<option value="1">ххх</option>
<option value="2">ууу</option>"


getObj(div).innerHTML=
"-----</OPTION>
<OPTION value="1">ххх</OPTION>
<OPTION value="2">ууу</OPTION>"


он зачем так делает?

Aetae 28.10.2010 18:58

Если я правильно понял о чем речь, то каждый браузер приводит код к тому виду который считает правильным. Кто-то любит одинарные кавычки, кто-то двойные, кто-то большие тэги, кто-то маленькие...))

Прошу прощенья, соображал плохо, пара часиков здорового сна помогла.))
В ie не прокатит добавление option через innerHTML.
Юзайте
new Option
.

рони 28.10.2010 23:39

Размышление на тему ...
<select id="sel" ></select>
<script language="JavaScript" type="text/javascript">
var responseText='<option>-----</option><option value="1">ххх</option><option value="2">ууу</option>';
var a=document.getElementById('sel');
a.outerHTML='<select id="sel" >'+responseText+'</select>'
a.innerHTML=responseText
</script>

Aetae 29.10.2010 00:14

Цитата:

Сообщение от рони (Сообщение 76404)
Размышление на тему ...

Ну собсно это тупо затирание старого создание нового. Если такой вариант приемлем, то можно сразу фигачить select целиком.

vinet 12.11.2010 02:47

Аналогичная проблема
 
Помогите пожалуйста. Во всех бразуерах (ФФ, Опера, Хром) работает код отлично, а вот ИЕ ругается
unknown runtime error

$ ('ObjectID').innerHTML = ((Msg != null) ? Msg : DefaultMsg);

ругается на все innerHTML в коде. подскажите что делать?

ObjectID - div элемент

monolithed 12.11.2010 08:46

Цитата:

Сообщение от vinet
$ ('ObjectID').

1. что-то это очень смутно похоже на идентификатор.
2. если используете jQuery то там есть функции html() и text() в вашем случае лучше с ними работать

<script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
    $('body').append('<div id="div" />').text((1<2) ? 'ok' : 'none');
});
</script>

vinet 12.11.2010 13:31

Цитата:

Сообщение от monolithed (Сообщение 78766)
1. что-то это очень смутно похоже на идентификатор.
2. если используете jQuery то там есть функции html() и text() в вашем случае лучше с ними работать

<script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
    $('body').append('<div id="div" />').text((1<2) ? 'ok' : 'none');
});
</script>

1. В смысле? Да <div id="ObjectID">Text here</div>

2. Используется mootools.

никак не удается решить проблему (

Kolyaj 12.11.2010 13:43

vinet,
в вашем случае только телепаты помогут.

x-yuri 12.11.2010 13:46

если бы хоть ошибка нормально была описана...

vinet 12.11.2010 14:11

Браузер: ИЕ8.

Используется фреймворк: mootools 1.2

При запуске страницы, содержащей ЖС код, ИЕ8 выводит окно с ошибками:

http://pixs.ru/showimage/window1png_1138225_1193416.png

256 строка кода файла init.js

http://pixs.ru/showimage/w22png_5125804_1193418.png

в самом файле mootools

http://pixs.ru/showimage/w333png_9935652_1193422.png

x-yuri 12.11.2010 15:09

достаточно было указать версии и текст ошибок

возможно, mootools не запустился, поэтому и init.js не работает. Можешь дать ссылку на страницу?

vinet 12.11.2010 15:19

Цитата:

Сообщение от x-yuri (Сообщение 78812)
достаточно было указать версии и текст ошибок

возможно, mootools не запустился, поэтому и init.js не работает. Можешь дать ссылку на страницу?

Нет, крутится оно локально на денвере.
ИЕ вообще ругается на все innerHTML
Даже на такое :

$ ('AttFileOperationInfoBox').innerHTML = 'tralalal';

правда перед этим идет ошибка в самом mootools

x-yuri 12.11.2010 15:42

тогда прикрепи страничку с необходимыми файлами к сообщению

vinet 17.11.2010 03:06

Вложений: 1
Ошибку нашел:
когда есть одна форма, а в нее динамически добавляется ещё одна и внутри нее динамически что-то добавляется, то это вызывает ошибку.

Пример в файле.

Кто-то может что-то сказать?

x-yuri 17.11.2010 11:14

более краткая версия
<!doctype html>
<html>
<body>
<form>
    <form id="form2"></form>
</form>
<script>
    var form2 = document.getElementById('form2');
    form2.innerHTML = 'text';
</script>
</body>
</html>

но дело в том, что формы не могут быть вложенными:
<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM) -- interactive form -->
и в конце концов, как, по-твоему, должна сабмититься внешняя форма? Так что лучше расскажи, зачем тебе понадобились вложенные формы

vinet 17.11.2010 13:22

Цитата:

Сообщение от x-yuri (Сообщение 79592)
более краткая версия
<!doctype html>
<html>
<body>
<form>
    <form id="form2"></form>
</form>
<script>
    var form2 = document.getElementById('form2');
    form2.innerHTML = 'text';
</script>
</body>
</html>

но дело в том, что формы не могут быть вложенными:
<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM) -- interactive form -->
и в конце концов, как, по-твоему, должна сабмититься внешняя форма? Так что лучше расскажи, зачем тебе понадобились вложенные формы

Есть одна форма, в которую инжектируется вторая, так визуальная её часть должна быть внутри нее.
Не хочется абсолютным позиционированием элементы выставлять.

x-yuri 17.11.2010 13:37

еще подробнее

vinet 17.11.2010 13:50

Цитата:

Сообщение от x-yuri (Сообщение 79607)
еще подробнее

Есть не редактируемая форма шаблона некой КМС, туда подключается плагин, который визуально должен быть в форме добавления новости, но и сам выполнять некие действия. Так используется insertBefore() чтобы вставить новую форму в существующую добавления новости.

В общем я понял что формы нельзя делать вложенными.

x-yuri 18.11.2010 23:35

есть такая штука как диалоговые окна. А еще если много функциональности на одной страничке, стоит ее на несколько разбить

vinet 19.11.2010 00:03

Спасибо :)

Freakmeister 15.01.2011 22:40

Народ, подскажите плз как исправить такой косяк... Делаю органайзер для сайта, на странице добавления нового события есть форма из трёх раскрывающихся списков - day, month и year:



Понятно, что в каждом месяце определённое количество дней и я делал, чтобы при смене месяца, просчитывалось количество дней в этом месяце и менялось содержимое списка day. Вот скрипт полностью (сильно не пинайте, я новичёк в JS):

<script type='text/javascript'>

function isLeapYear(year) {   // узнаём високосный ли год
 if (year % 4 == 0) return true
 return false
}

function getDays(month, year) {   //узнаём сколько дней в месяце
 var ar = new Array(12)
 ar[1] = 31 // Январь
 ar[2] = (isLeapYear(year)) ? 29 : 28 // Февраль
 ar[3] = 31 // Март
 ar[4] = 30 // Апрель
 ar[5] = 31 // Май
 ar[6] = 30 // Июнь
 ar[7] = 31 // Июль
 ar[8] = 31 // Август
 ar[9] = 30 // Сентябрь
 ar[10] = 31 // Октябрь
 ar[11] = 30 // Ноябрь
 ar[12] = 31 // Декабрь
 return ar[month]
}

function gethtml(numb, selected) {    //получаем вёрстку инпута
 var b;
 var i;
 var r;
 var s;
   for (i=1; i<=numb; i++){
     r=''+i
       if (r.length<2) {  //добавляем 0 вначало, если число однозначное
       r='0'+r;
       }
     s=''
     if (i==selected) {  //выставляем день, который был выставлен вначале
     s=' selected'
     }
   b = b+\"<option value='\"+r+\"'\"+s+\">\"+r+\"</option>\"
   }
 return b
}

function countday() {   //главная функция, которая запускает все остальные
 var day = document.getElementById('day');
 var s=day.value;
 var month = document.getElementById('month');
 var year = document.getElementById('year');
 var a = getDays(month.value, year.value);
 day.innerHTML = '';
 day.innerHTML = gethtml(a, s);
}
</script>


При смене месяца вызывается функция countday(). Всё отлично работает во всех браузерах кроме IE - в day получается пустой список. Я стал досконально перебирать код и выяснил, что innerHTML в IE вообще не работает, по крайней мере на селектак. Даже если для простоты вместо всего вышеизложенного написать так:
function countday() {
var day = document.getElementById('day');
day.innerHTML = '<option>test</option>';
}

IE всё-равно возвращает в day пустой список, а другие браузеры возвращают test. Подскажите плз как исправить ситуацию. =\

Aetae 15.01.2011 22:50

Даж вдумываться не хочу, есть же объект Date()

Дней в месяце m годa y:
var y=2011,m=2;
alert(new Date(y,m,0).getDate())


Как это работает:
Объект Date принимает значение месяца от 0 до 11, т.о. мы задаём нужным_нам+1, при этом ставя день месяца в 0 мы заставляем его принимать значение: последний день месяца, предыдущего заданнному.

Amphiluke 15.01.2011 22:55

Freakmeister, для кроссбраузерности необходимо использовать метод add(). Вот, посмотрите пример.
function foo() {
	var optn;
	var sel = document.getElementById("month");
	for (var i = 0; i < 5; i++) {
		optn = document.createElement("option");
		optn.text = i;
		optn.value = i;
		try { sel.add(optn, null); } catch(e) { sel.add(optn); }
	}
}


<form action="#">
	<input type="button" value="add options" onclick="foo();" />
	<select id="month"></select>
</form>


Часовой пояс GMT +3, время: 06:09.