Полезная информация

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№108-08-2008 23:12:08

Tranclugator
Участник
 
Группа: Members
Зарегистрирован: 08-08-2008
Сообщений: 6
UA: IE 7.0

Проблема со скриптами автокомплита на локальном вэб-сервере

Проблема: в текстовом поле страницы по мере ввода текста должен автоматически ниспадать список всех совпадающих доступных вариантов, полный список которых введен в исходный код вэб-страницы. Также эта страница использует скрипт "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-м первым буквам и т.д.

Разработчики системы ("Витакарта" называется :P ) не смогли подсказать, в чем дело, хотя в учебной комнате ГорЗдрава стояли Firefox, как я помню :D. Я уже сломал мозг,копаясь в настройках Файрфокса, Оперы и IE, но как че ни меняй - результат один - в ИЕ работает, в остальных браузерах - нет :cry: Казалось бы, не проблема работать в ИЕ, ан нет - ИЕ переглючивает параметры страницы при каждой новой распечатке рецепта (говорят, это давнишняя неистребимая ошибка ИЕ, никак не связанная с вэб-узлом).

Код страницы ввода рецепта не помещается на страницу, через загрузку не получается выложить - размер 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)

Отсутствует

 

№211-08-2008 02:27:25

ViRUS
ДМБ 2008
 
Группа: Extensions
Откуда: Xa!
Зарегистрирован: 05-11-2004
Сообщений: 1468
UA: Firefox 3.0

Re: Проблема со скриптами автокомплита на локальном вэб-сервере

Что пишет в консоли ошибок?

ЗЫ: 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.


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

Отсутствует

 

№312-08-2008 01:44:36

Tranclugator
Участник
 
Группа: Members
Зарегистрирован: 08-08-2008
Сообщений: 6
UA: IE 7.0

Re: Проблема со скриптами автокомплита на локальном вэб-сервере

При открытии файла ошибок не возникает, записи об ошибках появляются в момент набора текста в графе названия препарата, вот такие (сорри за русское название файла Рецепт):

Ошибка: 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 с параноидальными настройками локальной безопасности =) Но на работе фаера нет вообще, попробую еще глянуть, какие на рабочем компе ошибки показывает. Могу, если нужно, залить архив с хтмл-кой и скриптом на рапиду (если такое разрешено).

Отсутствует

 

№412-08-2008 21:12:58

Tranclugator
Участник
 
Группа: Members
Зарегистрирован: 08-08-2008
Сообщений: 6
UA: IE 7.0

Re: Проблема со скриптами автокомплита на локальном вэб-сервере

На рабочем компе та же ошибка

Отсутствует

 

№513-08-2008 13:39:46

arka
Участник
 
Группа: Members
Зарегистрирован: 10-08-2005
Сообщений: 183
UA: Firefox 3.0
Веб-сайт

Re: Проблема со скриптами автокомплита на локальном вэб-сервере

Потому что используется event - это не для FF. Тем таких уже было полно. Гугли event firefox

Отсутствует

 

№613-08-2008 22:17:16

Tranclugator
Участник
 
Группа: Members
Зарегистрирован: 08-08-2008
Сообщений: 6
UA: IE 7.0

Re: Проблема со скриптами автокомплита на локальном вэб-сервере

Надо же... А как же в учебной комнате FF стояли? :o То есть, никак FF не настроить под такой скрипт? Гуглить event мне бесполезно, так как я даже слова такого не знаю :D, и Java для меня - это просто красивое слово :D . Просто, если такая страница с FF никак не сможет правильно работать, то просто скажите, пожалуйста, мне об этом, чтобы я понял, что дальше мучаться нечего. Если все же какой-то способ есть, то хоть намекните, какой.

Отсутствует

 

№714-08-2008 10:48:02

arka
Участник
 
Группа: Members
Зарегистрирован: 10-08-2005
Сообщений: 183
UA: Firefox 3.0
Веб-сайт

Re: Проблема со скриптами автокомплита на локальном вэб-сервере

В нормальных браузерах это работать не будет. Расширение IETab вам в помощь - устанавливаем и работаем через него с кривыми разработками.

Отсутствует

 

№814-08-2008 20:33:02

Tranclugator
Участник
 
Группа: Members
Зарегистрирован: 08-08-2008
Сообщений: 6
UA: IE 7.0

Re: Проблема со скриптами автокомплита на локальном вэб-сервере

arka, Спасибо, похоже, что этот способ работает!
:beer:


Только называется это расширение, похоже, с пробелом: IE Tab :)

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]