Страницы: 1
Проблема: в текстовом поле страницы по мере ввода текста должен автоматически ниспадать список всех совпадающих доступных вариантов, полный список которых введен в исходный код вэб-страницы. Также эта страница использует скрипт "autocomplete.js". При работе с этой страницей через MS IE эти функции работают, а при работе через Firefox 2.0.0.16 и 3.0.1 (как и Опера 9.5) - дроп-даун список не появляется Исходный код сохраненной страницы и скрипт прилагаю (фамилии пациента, адрес и прочая личная инфа изменены на вымышленные!). ОС : WinXP HE SP2, Firefox 3.0.1 с одним дополнением в виде Сановской Java, java 6u6
Что за сайт: система электронных медицинских карт, созданная в виде локального вэб-сервер медицинского учреждения. Данная страница производит формирование специального рецепта на препарат, выписываемый в рамках системы ДЛО (дополнительного лекарственного обеспечения). Дроп-даун лист должен выводить список всех доступных для выписки по ДЛО препаратов и их лекарственных форм, ища совпадения по первым вводимым буквам. Например, вы ввели "А" и выпадает список с амлодипином и др. препаратами на букву А. При дальнейшем вводе список ограничивается совпадениями по 2, 3, 4-м первым буквам и т.д.
Разработчики системы ("Витакарта" называется ) не смогли подсказать, в чем дело, хотя в учебной комнате ГорЗдрава стояли Firefox, как я помню . Я уже сломал мозг,копаясь в настройках Файрфокса, Оперы и IE, но как че ни меняй - результат один - в ИЕ работает, в остальных браузерах - нет Казалось бы, не проблема работать в ИЕ, ан нет - ИЕ переглючивает параметры страницы при каждой новой распечатке рецепта (говорят, это давнишняя неистребимая ошибка ИЕ, никак не связанная с вэб-узлом).
Код страницы ввода рецепта не помещается на страницу, через загрузку не получается выложить - размер 170 кб . Но похоже, фокус в том, что файрфокс не может нормально подгрузить и выполнить скрипт autocomplete.js - вот он
var matches = new Array(); var cur_sel = -1; var esc_hidden = false; var last_nav_key = false; var chosen = false; var keypad_blocked = false function getPlatf(obj) { while(obj&&!(obj.nodeName=="DIV"&&obj.className=="container")) obj=obj.parentElement; if(!obj) return null; var x=0, y=0, tg=obj; while(obj) { x+=obj.offsetLeft; y+=obj.offsetTop; obj=obj.offsetParent; } return {target: tg, x: x, y:y}; } function init(textbox, layer, width, height){ textbox.style.width = width+"px"; textbox.style.height = height+"px"; layer.style.width = (width-2)+"px"; layer.style.top = getPositionY(textbox)+height+"px"; layer.style.left = getPositionX(textbox)+"px"; } function getPositionX(obj) { var x=0; while(obj) { x+=obj.offsetLeft; obj=obj.offsetParent; } return x; } function getPositionY(obj) { var y=0; while(obj) { y+=obj.offsetTop; obj=obj.offsetParent; } return y; } function findMatches(textbox, data){ var str = textbox.value; matches = new Array(); for (var i=0; i<data.length; i++){ if (str.length<=data[i].length) for (var j=0; j<str.length; j++){ if (str.toLowerCase().charAt(j)==data[i].toLowerCase().charAt(j)) { if (j==str.length-1){ matches.push(data[i]); } } else break; } } matches.sort(); return matches; } function generateIds(textbox){ var id = new Array(); var _id = ""; for (var i=0; i<matches.length; i++){ _id = "row"+textbox.id+i; id.push(_id); } return id; } function selectItem(resLayer, textbox){ var bounds = matches.length; var chrcode = event.keyCode; var ids = generateIds(textbox); if (chrcode == 27){//escape key hide(resLayer); esc_hidden=true; return; } else esc_hidden=false; if (chrcode == 38){//up key last_nav_key = true; if (cur_sel>0){ cur_sel--; if (cur_sel!=-1) document.getElementById(ids[cur_sel]).style.background="#F6D5FA"; if (cur_sel!=bounds) document.getElementById(ids[cur_sel+1]).style.background="#E9F3F9"; textbox.value=document.getElementById(ids[cur_sel]).innerText; return; } } else if (chrcode == 40){//down key last_nav_key = true; if (cur_sel<bounds-1){ cur_sel++; if (cur_sel<=bounds){ document.getElementById(ids[cur_sel]).style.background="#F6D5FA"; if (cur_sel!=0) document.getElementById(ids[cur_sel-1]).style.background="#E9F3F9"; } textbox.value=document.getElementById(ids[cur_sel]).innerText; return; } } else if (chrcode == 13){//enter key hide(resLayer); last_nav_key=false; chosen = true; return; } else { last_nav_key=false; cur_sel=-1; chosen = false; return; } } function hide(resLayer){ resLayer.style.visibility = "hidden"; matches = new Array(); cur_sel=-1; } function cancelHiglight(textbox){ var ids = generateIds(textbox); for (var i=0; i<ids.length; i++) document.getElementById(ids[i]).style.background="#E9F3F9"; } function selectText(textbox_id, inner){ document.getElementById(textbox_id).value = inner; } function displayResults(textbox_id, resLayer, resDiv, data){ if (event.keyCode==38 || event.keyCode==40) return; if (document.getElementById(textbox_id).value!="" && !esc_hidden && !chosen){ resLayer.style.visibility = "hidden"; var arr = findMatches(document.getElementById(textbox_id), data); var rslt = ""; var tbb = "<table onmouseover=\"keypad_blocked=true; last_nav_key=false\" onmouseout=\"keypad_blocked=false\" width=\"100%\" cellpadding=0 cellspacing=0>"; var rwb1 = "<tr id=\"row"; var rwb2 = "\" onmouseover=\"cancelHiglight(document.getElementById('"+textbox_id+"')); cur_sel=-1; this.style.background='#F6D5FA'\" onmouseout=\"this.style.background='#E9F3F9'\">"; var rwe = "<\/tr>"; var clb1 = "<td onmouseover=\"document.getElementById('"+textbox_id+"').value=this.innerText\">"; var cle = "<\/td>"; var tbe = "<\/table>" if (arr.length>0){ rslt+=tbb; for (var i=0; i<arr.length; i++){ rslt+=rwb1+textbox_id+i+rwb2; rslt+=clb1; rslt+=arr[i]; rslt+=cle; rslt+=rwe; } rslt+=tbe; resDiv.innerHTML = rslt; resLayer.style.visibility = "visible"; } } else { matches = new Array(); resLayer.style.visibility = "hidden"; } }
В чем грабли? Если необходимо, попробую выложить и код страницы, но придется вырезать из нее почти весь список препаратов, а то сообщение форума не держит такой большой код.
Отредактировано Tranclugator (08-08-2008 23:25:16)
Отсутствует
Что пишет в консоли ошибок?
ЗЫ: http://forum.mozilla-russia.org/upload.php
Uploading Rules:
- You can use the upload to upload image and text with the following extention. (.txt, .gif, .jpg, .jpeg, .png, .xpi)
- The file must be under 488KB
- The file must contain only latin characters like alphanumeric and "+" "-" "_" "."
- Please use a sensible file name or i will remove the file, if anyone abuses this uploader, it will be removed.
Непослушные локоны горничной выбивались из-под её кружевного фартука...
Отсутствует
При открытии файла ошибок не возникает, записи об ошибках появляются в момент набора текста в графе названия препарата, вот такие (сорри за русское название файла Рецепт):
Ошибка: event is not defined
Источник: file:///X:/Vita/%D0%A0%D0%B5%D1%86%D0%B5%D0%BF%D1%82.files/autocomplete.js
Строка: 77
Ошибка: event is not defined
Источник: file:///X:/Vita/%D0%A0%D0%B5%D1%86%D0%B5%D0%BF%D1%82.files/autocomplete.js
Строка: 137
И все ошибки ссылаются на 77 или 137 строку, новые записи об ошибках появляются при вводе каждой новой буквы.
Добавлено Tue Aug 12 01:47:30 2008 :
Правда, это на моем домашнем компе, где еще стоит Аутпост 6.5 с параноидальными настройками локальной безопасности Но на работе фаера нет вообще, попробую еще глянуть, какие на рабочем компе ошибки показывает. Могу, если нужно, залить архив с хтмл-кой и скриптом на рапиду (если такое разрешено).
Отсутствует
На рабочем компе та же ошибка
Отсутствует
Надо же... А как же в учебной комнате FF стояли? То есть, никак FF не настроить под такой скрипт? Гуглить event мне бесполезно, так как я даже слова такого не знаю , и Java для меня - это просто красивое слово . Просто, если такая страница с FF никак не сможет правильно работать, то просто скажите, пожалуйста, мне об этом, чтобы я понял, что дальше мучаться нечего. Если все же какой-то способ есть, то хоть намекните, какой.
Отсутствует
В нормальных браузерах это работать не будет. Расширение IETab вам в помощь - устанавливаем и работаем через него с кривыми разработками.
Отсутствует
arka, Спасибо, похоже, что этот способ работает!
Только называется это расширение, похоже, с пробелом: IE Tab
Отсутствует
Страницы: 1