[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Дополз до кроссбраузерности...
pavel24071988
Доброе всем утро!

Настал тот долгожданный момент в моей программе (я надеюсь!) , когда я вплотную столкнулся с проблемой кроссбраузерности. Так как запускал все время в IE! В нем то все работает. Что наверное очень хорошо для остальных браузеров!, ан нет В:

Opere начал отлаживать = некоторые функции не отрабатывают(подозреваю проблема в innerHTML/innerText/text/textContent) unsure.gif

Mozille XMLHttpRequest/Response в дебаггере выводять данные из базы, но таблицы(которые DHTML), в данном браузере не ресуются blink.gif

Подскажите пожалуйста хорошие книги по кроссбраузерности или советы какие - нибудь хорошие.

Я конечно понимаю что в век JQuery проблема не актуальна, но мы консерваторы, и пишем все, пока, на "чистом" JavaScript

Заранее Спасибо.



Спустя 1 час, 17 секунд (7.09.2011 - 09:54) ApuktaChehov написал(а):
Код показывайте, который не работает. Так я ничего не могу сказать.

Спустя 31 минута, 37 секунд (7.09.2011 - 10:25) pavel24071988 написал(а):
Функция удаления строки в Opere не отрабатывает!


// =======================================================================f_DelString()================= =============================================================================//
//Пишем функцию f_CreateXMLDelDoc для создания XML строки запроса на удаление нашего заказа в списке документов текущего контрагента, в случае успеха -> возвращаем пользователя на список дакументов

function f_DelString() {
var del = document.all('foundnn').innerText;
var mainObj = document.getElementById('FoundTov').children[0];

oneChild = mainObj.document.getElementById('FoundTov').childNodes[0].children[del];
mainObj.removeChild(oneChild);
var i = 1;
//alert(document.getElementById('FoundTov').getElementsByTagName('tr')[0].childNodes[0].innerText);
try {
if(document.getElementById('FoundTov').getElementsByTagName('tr')[0].childNodes[0].innerText == "N/N"){
for (i=1; i<1000; i++){
document.getElementById('FoundTov').getElementsByTagName('tr')[i].childNodes[0].innerText = i;
}
}
else{}
}
catch(err){}
}


Спустя 1 минута, 12 секунд (7.09.2011 - 10:26) pavel24071988 написал(а):
FoundTov создаваемая на странице таблица

Спустя 1 час, 10 минут, 52 секунды (7.09.2011 - 11:37) ApuktaChehov написал(а):
В ИЕ и Опере есть не описанное в спецификации от W3C поле innerText через которое можно достать/установить текст из/в ноды(у). В Мозиллоподобных браузерах и просто экзотических такого поля нет.


document.all так же не всеми браузерами держится.

Спустя 1 час, 28 минут, 30 секунд (7.09.2011 - 13:06) pavel24071988 написал(а):
"В Мозиллоподобных браузерах и просто экзотических такого поля нет" - это конец? Ничего нельзя сделать?

У меня задачи что бы везде работала, и в Хроме - до туда не добрался ещё.

Спустя 27 минут, 36 секунд (7.09.2011 - 13:33) ApuktaChehov написал(а):
pavel24071988 - в смысле конец?
Надо по другому реализовать функционал.

Мне вот непонятно вот это:

var mainObj = document.getElementById('FoundTov').children[0];

oneChild = mainObj.document.getElementById('FoundTov').childNodes[0].children[del];

Сначала вы получаете объект, а после используете его, для получение такого же объекта, который, вроде бы, должен находиться в самом себе.

Честно, я не понимаю, ваш алгоритм. И вы как то странно получаете доступ к объектам.

Вдобавок, нафиг вам сдались исключения?

Спустя 50 минут, 27 секунд (7.09.2011 - 14:24) pavel24071988 написал(а):
-
Косячок мой. Понял неправоту
Исправляю на :

var mainObj = document.getElementById('FoundTov').children[0];
oneChild = mainObj.children[del];
?

-
Исключение :
      for (i=1; i<1000; i++){  
document.getElementById('FoundTov').getElementsByTagName('tr')[i].childNodes[0].innerText = i;
}

Оно не нужно! Цикл начинается со второй записи т.е с
document.getElementById('FoundTov').getElementsByTagName('tr')[[b]1[/b]].childNodes[0].innerText = i;


Я и так из Мат части не вылезаю, а все равно... :angry:

Спустя 2 минуты, 12 секунд (7.09.2011 - 14:26) ApuktaChehov написал(а):
что вы пытаетесь сделать с innerText? Т.е. для чего используете?

Спустя 11 минут, 4 секунды (7.09.2011 - 14:37) pavel24071988 написал(а):
Выставляется N/N (порядковый номер) строк по порядку, после удалении одной из них.

Спустя 3 минуты, 39 секунд (7.09.2011 - 14:41) ApuktaChehov написал(а):
А чем вам innerHTML не угодил?

Спустя 5 минут, 57 секунд (7.09.2011 - 14:47) pavel24071988 написал(а):
function f_DelString() {
var del = parseInt(document.all('foundnn').innerHTML);
var mainObj = document.getElementById('FoundTov').children[0];
var oneChild = document.getElementById('FoundTov').childNodes[0].children[del];
mainObj.removeChild(oneChild);
}

вот это никак не работает в Opere !!!
Разве опера не знает св-ва Child?

Спустя 4 минуты, 24 секунды (7.09.2011 - 14:51) ApuktaChehov написал(а):
var del = parseInt(document.all('foundnn').innerHTML);


Что вы пытаетесь этим сделать?

Спустя 4 минуты, 53 секунды (7.09.2011 - 14:56) pavel24071988 написал(а):
Задать переменной тип number (на всякий случай)

Спустя 1 минута, 8 секунд (7.09.2011 - 14:57) ApuktaChehov написал(а):
А вот этим?
document.all('foundnn').innerHTML

Спустя 20 минут, 3 секунды (7.09.2011 - 15:17) pavel24071988 написал(а):
document.all('foundnn').innerHTML - Все по идее так и должно обтрабатывать, но я сейчас "мучаю" Opera И пробую все возможные варианты. Пальцем в небо почти. Сегодня вечером хочу добраться до какой-нить хорошей книги по кроссбрауз.......

Спустя 4 минуты, 3 секунды (7.09.2011 - 15:21) ApuktaChehov написал(а):
Еще раз, что вы хотите сделать этим?
document.all('foundnn').innerHTML

Спустя 1 час, 5 минут, 57 секунд (7.09.2011 - 16:27) pavel24071988 написал(а):
document.all('foundnn').innerHTML


Я понимаю что это истинно, но я сейчас мучаю Opera и пробую все возможные варианты :blink:

var oneChild = document.getElementById('FoundTov').childNodes[0].children[1];
mainObj.removeChild(oneChild);

Не работает в Opere...

Спустя 24 минуты, 22 секунды (7.09.2011 - 16:52) ApuktaChehov написал(а):
ПФФФ. Что истинно-то? Причем тут истинно или ложно?!

Вы объясните, пожалуйста, что должно находиться в переменно del.

И не нужно мне напоминать, что вы работаете с оперой. Я это уже понял.
По видимому, вы пробуете всевозможные неправильные варианты.

У вас элементарный скрипт, который вы не можете настроить из за отсутствия знаний. При этом, почему-то упорно не хотите отвечать на мои вопросы.

Если я не влияю на результат, может мне не стоит больше пытаться помочь?

Спустя 55 минут, 53 секунды (7.09.2011 - 17:47) pavel24071988 написал(а):
Ссори я не увидел что первое сообщение отправилось........
Когда пользователь кликает на строку в таблице которую хочет удалить - id этой строки заноситься в <lable> При нажатии на кнопку "удалить" переменная del берет из
document.all('foundnn').innerHTML
id(значение) -> сопоставляется с таблицей -> в таблице удаляется строка которая подходит под "условие"...

Спустя 1 час, 19 минут, 36 секунд (7.09.2011 - 19:07) ApuktaChehov написал(а):
Покажите мне верстку и весь код.

Спустя 12 часов, 45 минут, 1 секунда (8.09.2011 - 07:52) pavel24071988 написал(а):
Это страничка с таблицами и <label> - м о котором я писал выше (foundnn)


<div style="height: 280px; overflow:scroll">
<table
width="100%" id="FindTov" border="1" class="zagolovok">
<tr>
<th><div
align="center"><strong>N/N</strong></div></th>
<th><div
align="center"><strong>вн.код</strong></div></th>
<th><div
align="center"><strong>OEM</strong></div></th>
<th><div
align="center"><strong>сток номер </strong></div></th>
<th><div
align="center"><strong>наименование</strong></div></th>
<th><div
align="center"><strong>от прайса </strong></div></th>
<th><div
align="center"><strong>% скидки</strong></div></th>
<th><div
align="center"><strong>цена</strong></div></th>
<th><div
align="center"><strong>наличие</strong></div></th>
<th><div
align="center"><strong>кол-во в заказ </strong></div></th>
<th><div
align="center"><strong>мин. партия </strong></div></th>
<th><div
align="center"><strong>в коробке </strong></div></th>
</tr>
</table>
</div>
<div
style="visibility:">
<label
id = "tov1" class="zagolovok">Контейнер</label>
<label
id = "tov2" class="zagolovok">Контейнер</label>
<label
id = "tov3" class="zagolovok">Контейнер</label>
<label
id = "tov4" class="zagolovok">Контейнер</label>
<label
id = "tov5" class="zagolovok">Контейнер</label>
<label
id = "tov6" class="zagolovok">Контейнер</label>
<label
id = "tov7" class="zagolovok">Контейнер</label>
<label
id = "idtm" class="zagolovok"></label>
<label
id = "idtypetov" class="zagolovok"></label>

</div>
</td>
</tr>
<tr>
<td>
<div
align="right">
<input
type="submit" name="Submit5" class ="botton" value="Добавить в заказ" onclick="f_AddTovOrders(), f_show()" />
</div>
</td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
<tr>
<td><table
width="100%" border="0">
<tr>
<td><div
align="center" class=main >Состав заказа </div></td>
</tr>
<tr>
<td>
<div
style="overflow: scroll; height: 190px">
<table
width="100%" border="1" id="FoundTov" class="zagolovok">
<tr>
<th><div
align="center"><strong>N/N</strong></div></th>
<th><div
align="center"><strong>вн.код</strong></div></th>
<th><div
align="center"><strong>наименование</strong></div></th>
<th><div
align="center"><strong>цена</strong></div></th>
<th><div
align="center"><strong>кол-во</strong></div></th>
<th><div
align="center"><strong>сумма</strong></div></th>
<th><div
align="center"><strong>каталожн. код OEM </strong></div></th>
<th><div
align="center"><strong>сток. номер </strong></div></th>
</tr>
</table>

</div>
<div
align="right">
<input
type="submit" name="Submit5" class ="botton" value="Удалить строку" onclick="f_DelString()" />
</div>
<script
type="text/javascript">
//Подсветка по клику и при наведении мышки на ряд, множественный выбор по клику разрешен
f_FocusStringId2("FindTov","","clickedRow", false);
f_FocusStringIdDel("FoundTov","","clickedRow", true);
</script>
<div>
<p>
<p>
<label
id = "foundnn" class="zagolovok">Контейнер</label>
<label
id = "foundnn1" class="zagolovok">Контейнер</label>
</p>
</p>
</div>



Фунцкция выделения и занесения некоторых данных строки в <label>

// ==============================================================================f_FocusStringId2======= ==================================================================================//
//FocusStringId Пишем функцию FocusStringId -> вытаскивает данные с выделенной (по щелчку на поле = onclick) пользователем строки(документа, списка) мышью

function f_FocusStringId2(tableId, hoverClass, clickClass, multiple)
{
var table = document.getElementById(tableId);

//если не был передан четвертый аргумент, то по умолчанию принимаем его как true
if (typeof multiple == 'undefined') multiple = true;

if (hoverClass)
{
//регулярное выражение для поиска среди значений атрибута class элемента, имени класса обеспечивающего подсветку по наведению мыши на строку.
//Данное рег. выражение используется и в обработчике onclick

var hoverClassReg = new RegExp("\\b"+hoverClass+"\\b");

table.onmouseover = table.onmouseout = function(podsvetka)
{
if (!podsvetka) podsvetka = window.event;
var elem = podsvetka.target || podsvetka.srcElement;
while (!elem.tagName || !elem.tagName.match(/td|th|table/i)) elem = elem.parentNode;

//Если событие связано с элементом TD или TH из раздела TBODY
if (elem.parentNode.tagName == 'TR' && elem.parentNode.parentNode.tagName == 'TBODY')
{
var row = elem.parentNode;//ряд содержащий ячейку таблицы в которой произошло событие
//Если текущий ряд не "кликнутый" ряд, то в разисимости от события либо применяем стиль, назначая класс, либо убираем.

if (!row.getAttribute('clickedRow')) row.className = podsvetka.type=="mouseover"?row.className+" "+hoverClass:row.className.replace(hoverClassReg," ");
}
}
;
}


if (clickClass) table.onclick = function(nazhatie)
{
if (!nazhatie) nazhatie = window.event;
var elem = nazhatie.target || nazhatie.srcElement;
while (!elem.tagName || !elem.tagName.match(/td|th|table/i)) elem = elem.parentNode;

//Если событие связано с элементом TD или TH из раздела TBODY
if (elem.parentNode.tagName == 'TR' && elem.parentNode.parentNode.tagName == 'TBODY')
{
//регулярное выражение для поиска среди значений атрибута class элемента, имени класса обеспечивающего подсветку по клику на строке.
var clickClassReg = new RegExp("\\b"+clickClass+"\\b");
var row = elem.parentNode;//ряд содержащий ячейку таблицы в которой произошло событие

//Если текущий ряд уже помечен стилем как "кликнутый"

if (row.getAttribute('clickedRow'))
{
row.removeAttribute('clickedRow');//убираем флаг того что ряд "кликнут"
row.className = row.className.replace(clickClassReg, "");//убираем стиль для выделения кликом
row.className += " "+hoverClass;//назначаем класс для выделения строки по наведею мыши, т.к. курсор мыши в данный момент на строке, а выделение по клику уже снято
}
else //ряд не подсвечен
{
//если задана подсветка по наведению на строку, то убираем её
if (hoverClass) row.className = row.className.replace(hoverClassReg, "");
row.className += " "+clickClass;//применяем класс подсветки по клику
row.setAttribute('clickedRow', true);//устанавливаем флаг того, что ряд кликнут и подсвечен

//если разрешена подсветка только последней кликнутой строки

if (!multiple)
{
var lastRowI = table.getAttribute("lastClickedRowI");
//Если то текущей строки была кликнута другая строка, то снимаем с неё подсветку и флаг "кликнутости"
if (lastRowI!==null && lastRowI!=='' && row.sectionRowIndex!=lastRowI)
{
var lastRow = table.tBodies[0].rows[lastRowI];
lastRow.className = lastRow.className.replace(clickClassReg, "");//снимаем подсветку с предыдущей кликнутой строки
lastRow.removeAttribute('clickedRow');//удаляем флаг "кликнутости" с предыдущей кликнутой строки
}
}

//запоминаем индекс последнего кликнутого ряда
table.setAttribute("lastClickedRowI", row.sectionRowIndex);
var nn = (row.children[0]); //содержится значение (первого столбца)
var vn_kod = (row.children[1]);
var naimen = (row.children[4]);
var cena = (row.children[7]);
var kol_vo = (row.children[9].childNodes[0].value);
var kat_nomer = (row.children[2]);
var stok_nomer = (row.children[3]);
//alert(row.children[9].childNodes[0].value)
//var idtypedocspan = (row.children[10].innerHTML);
//alert(row.children[0].innerHTML);
//alert(row.children[10].innerHTML);

document.all('tov1').innerHTML = nn.innerText;
document.all('tov2').innerHTML = vn_kod.innerText;
document.all('tov3').innerHTML = naimen.innerText;
document.all('tov4').innerHTML = cena.innerText;
document.all('tov5').innerHTML = kol_vo;
document.all('tov6').innerHTML = kat_nomer.innerText;
document.all('tov7').innerHTML = stok_nomer.innerText;
}

}
}
;
}



Функция onklick по кнопке "удалить"

// =======================================================================f_DelString()================= =============================================================================//
//Пишем функцию f_CreateXMLDelDoc для создания XML строки запроса на удаление нашего заказа в списке документов текущего контрагента, в случае успеха -> возвращаем пользователя на список дакументов

function f_DelString() {
var del = document.all('foundnn').innerText;
var mainObj = document.getElementById('FoundTov').children[0];
alert(mainObj);
var oneChild = document.getElementById('FoundTov').childNodes[0].children[2];
alert(oneChild);
mainObj.removeChild(oneChild);

var i = 1;
//alert(document.getElementById('FoundTov').getElementsByTagName('tr')[0].childNodes[0].innerText);
try {
if(document.getElementById('FoundTov').getElementsByTagName('tr')[0].childNodes[0].innerText == "N/N"){
for (i=1; i<1000; i++){
document.getElementById('FoundTov').getElementsByTagName('tr')[i].childNodes[0].innerText = i;
}
}
else{}
}
catch(err){}
}


Таким образом создаётся таблица

var b = document.getElementById("tov2").innerText;
var c = document.getElementById("tov3").innerText;
var d = document.getElementById("tov4").innerText;
var e = document.getElementById("tov5").innerText;
var l = parseFloat(document.getElementById("tov4").innerText*document.getElementById("tov5").innerText).toFixed(2);
var k = document.getElementById("tov6").innerText;
var f = document.getElementById("tov7").innerText;

var r = document.createElement('tr');

var ca = document.createElement('td');
var cb = document.createElement('td');
var cc = document.createElement('td');
var cd = document.createElement('td');
var ce = document.createElement('td');
var cl = document.createElement('td');
var ck = document.createElement('td');
var cf = document.createElement('td');
//var cj = document.createElement('td');
//var cg = document.createElement('td');
//var cl = document.createElement('td');


var ta = document.createTextNode(a);
var tb = document.createTextNode(b);
var tc = document.createTextNode(c);
var td = document.createTextNode(d);
var te = document.createElement('input')
te.type = "text";
te.value = e;
te.id = "input";
var tl = document.createTextNode(l);
var tk = document.createTextNode(k);
var tf = document.createTextNode(f);
//var tj = document.createTextNode(j);
//var tg = document.createTextNode(k);
//var tl = document.createTextNode(l);


var t = document.getElementById('FoundTov');


ca.appendChild(ta);
cb.appendChild(tb);
cc.appendChild(tc);
cd.appendChild(td);
ce.appendChild(te);
cl.appendChild(tl);
ck.appendChild(tk);
cf.appendChild(tf);
//cj.appendChild(tj);
//cg.appendChild(tg);
//cl.appendChild(tl);


r.appendChild(ca);
r.appendChild(cb);
r.appendChild(cc);
r.appendChild(cd);
r.appendChild(ce);
r.appendChild(cl);
r.appendChild(ck);
r.appendChild(cf);
//r.appendChild(cj);
//r.appendChild(cg);
//r.appendChild(cl);


t.tBodies(0).appendChild(r);
/*
var select = document.getElementById('FoudTov').childNodes[0].children[i+1].childNodes[4];
var newelem = document.createElement('input');
newelem.type = "text";
newelem.value = "0";
select.appendChild(newelem);
*/

}
}
}

alert("Товар успешно добавлен в Состав заказа");
}

Спустя 4 часа, 14 минут, 51 секунда (8.09.2011 - 12:07) ApuktaChehov написал(а):
Покажите мне html код строки, которую вы удаляете. И как и откуда вызывается функция удаления.

Спустя 18 минут, 57 секунд (8.09.2011 - 12:26) pavel24071988 написал(а):
Строка которую в последующем надо удалить создаётся динамически, там в коде "выше" я это отразил.



Уважаемый ApuktaChehov - спасибо за участие в моей пробеме.
Наверное было изначально неправильно привлекать Вас к решению такой пустяковой задаче.
я вообщем решил проблему с Opera: заменив в коде

// =======================================================================f_DelString()================= =============================================================================//
//Пишем функцию f_CreateXMLDelDoc для создания XML строки запроса на удаление нашего заказа в списке документов текущего контрагента, в случае успеха -> возвращаем пользователя на список дакументов

function f_DelString() {
var del = document.all('foundnn').innerText;
var mainObj = document.getElementById('FoundTov').children[0];
alert(mainObj);
var oneChild = document.getElementById('FoundTov').childNodes[0].children[2];
alert(oneChild);
mainObj.removeChild(oneChild);

var i = 1;
//alert(document.getElementById('FoundTov').getElementsByTagName('tr')[0].childNodes[0].innerText);
try {
if(document.getElementById('FoundTov').getElementsByTagName('tr')[0].childNodes[0].innerText == "N/N"){
for (i=1; i<1000; i++){
document.getElementById('FoundTov').getElementsByTagName('tr')[i].childNodes[0].innerText = i;
}
}
else{}
}
catch(err){}
}


заменил

var oneChild = document.getElementById('FoundTov').childNodes[0].children[2];

на

var oneChild = document.getElementById('FoundTov').children[0].children[2];


Спасибо за участие.
Надеюсь больше не писать о таких пустяковых проблемах

Пошел мучать Mozilla - (у)



Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.