Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> showModalDialog, в opera & mozilla 
:(
    Опции темы
fleetboss
Дата 21.3.2010, 04:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2009

Репутация: нет
Всего: нет



Помогите пожалуйста разобраться. У меня есть чат, в котором я юзаю showModalDialog для смайликов. Окно открывается, но когда я нажимаю на смайлик просходит ошибка (обратный объект не найден).

Вот сам код
Код

<script>
dFeatures = 'dialogHeight: 450px; dialogWidth: 1049px; dialogTop: 646px; dialogLeft: 4px; edge: Raised; center: Yes; help: no; resizable: no; status: no;';//default features 

modalWin = ""; 
function xShowModalDialog( sURL, vArguments, sFeatures ) 
    { 
    if (sURL==null||sURL=='') 
    { 
        alert ("Invalid URL input."); 
        return false; 
    } 
    if (vArguments==null||vArguments=='') 
    { 
        vArguments=''; 
    } 
    if (sFeatures==null||sFeatures=='') 
    { 
        sFeatures=dFeatures; 
    } 
    if (window.navigator.appVersion.indexOf("MSIE")!=-1) 
    { 
        window.showModalDialog ( sURL, vArguments, sFeatures ); 
        return false; 
    } 
    sFeatures = sFeatures.replace(/ /gi,''); 
    aFeatures = sFeatures.split(";"); 
    sWinFeat = "directories=0,menubar=0,titlebar=0,toolbar=0,"; 
    for ( x in aFeatures ) 
    { 
        aTmp = aFeatures[x].split(":"); 
        sKey = aTmp[0].toLowerCase(); 
        sVal = aTmp[1]; 
        switch (sKey) 
        { 
            case "dialogheight": 
                sWinFeat += "height="+sVal+","; 
                pHeight = sVal; 
                break; 
            case "dialogwidth": 
                sWinFeat += "width="+sVal+","; 
                pWidth = sVal; 
                break; 
            case "dialogtop": 
                sWinFeat += "screenY="+sVal+","; 
                break; 
            case "dialogleft": 
                sWinFeat += "screenX="+sVal+","; 
                break; 
            case "resizable": 
                sWinFeat += "resizable="+sVal+","; 
                break; 
            case "status": 
                sWinFeat += "status="+sVal+","; 
                break; 
            case "center": 
                if ( sVal.toLowerCase() == "yes" ) 
                { 
                    sWinFeat += "screenY="+((screen.availHeight-pHeight)/2)+","; 
                    sWinFeat += "screenX="+((screen.availWidth-pWidth)/2)+","; 
                } 
                break; 
        } 
    } 
    modalWin=window.open(String(sURL),"",sWinFeat); 
    if (vArguments!=null&&vArguments!='') 
    { 
        modalWin.dialogArguments=vArguments; 
    } 
} 
</script>
<input type="text" name="text">
<input type="button" onclick="javascript:xShowModalDialog('smiles.html',this,'');" value="click">


smiles.html
Код

<HTML><HEAD><meta content="text/html; charset=windows-1251" http-equiv=Content-type>
<TITLE>Смайлики</TITLE>
<script>
function S(name)
{
        var sData = dialogArguments;
        sData.out.text.focus();
        sData.out.text.value = sData.out.text.value + ' :'+name+':';
}
</SCRIPT>
</HEAD>
<BODY leftmargin=2 topmargin=2 marginheight=2 bgcolor=#EBEDEC><CENTER>
<script>
var i=0;
var sm = new Array("adolf",20,20,  "am",18,23,  "angel",20,25,  "angl",88,28,  "aplause",31,25,  "arrow",20,20,  "baby",20,22);
while(i<sm.length) {
        var s = sm[i++];
        document.write('<IMG SRC=i/smile/'+s+'.gif WIDTH='+sm[i++]+' HEIGHT='+sm[i++]+' BORDER=0 ALT="'+s+'" onclick="S(\''+s+'\')" style="cursor:pointer"> ');
}
</SCRIPT>

<BR><INPUT TYPE="button" value=" Закрыть " onclick="window.close()" style="border: solid 1pt #B0B0B0; font-family: MS Sans Serif; font-size: 10px; color: #191970; MARGIN-BOTTOM: 2px; MARGIN-TOP: 1px;">
</CENTER>
</BODY>
</HTML>


out.text не хочет находить, НО если использовать мой старый код (работает только в IE) то все ок

вот сам он
Код

function smiles() {
  var x = event.screenX - 150;
  var y = event.screenY - 350;
  var sFeatures = "dialogLeft:"+x+"px;dialogTop:"+y+"px;dialogHeight:380px;dialogWidth:305px;help:no;status:no;unadorned:yes";
  window.showModalDialog("smiles.html", window, sFeatures);
}


Может кто помоч? нужен рабочий скрипт для всех браузеров. Чтобы нажав в smiles.html отсылался текст в строку на обратно странице id text. Функция xShowModalDialog открывается во всех браузерах вот только обратка не рабоает  smile 

Это сообщение отредактировал(а) fleetboss - 21.3.2010, 04:52
PM MAIL   Вверх
fleetboss
Дата 24.3.2010, 05:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2009

Репутация: нет
Всего: нет



 smile может кто помочь?
PM MAIL   Вверх
fleetboss
Дата 30.3.2010, 02:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2009

Репутация: нет
Всего: нет



 smile 
PM MAIL   Вверх
EmilRegis
Дата 30.3.2010, 05:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 21.9.2007

Репутация: 1
Всего: 4



у вас цикл точно правильно определён?
Код

var sm = new Array("adolf",20,20,  "am",18,23,  "angel",20,25,  "angl",88,28,  "aplause",31,25,  "arrow",20,20,  "baby",20,22);
while(i<sm.length) {
        var s = sm[i++];
        document.write('<IMG SRC=i/smile/'+s+'.gif WIDTH='+sm[i++]+' HEIGHT='+sm[i++]+' BORDER=0 ALT="'+s+'" onclick="S(\''+s+'\')" style="cursor:pointer"> ');
}

может надо var s = sm[i]; ?

Добавлено через 3 минуты и 1 секунду
или так попробовать
Код

var i=0;
var sm = new Array(["adolf",20,20], ["am",18,23],  ["angel",20,25],  ["angl",88,28],  ["aplause",31,25],  ["arrow",20,20],  ["baby",20,22]);
while(i<sm.length) {
        var s = sm[i][0];
        document.write('<IMG SRC=i/smile/'+s+'.gif WIDTH='+sm[i][1]+' HEIGHT='+sm[i][2]+' BORDER=0 ALT="'+s+'" onclick="S(\''+s+'\')" style="cursor:pointer"> ');
}

PM MAIL   Вверх
fleetboss
Дата 30.3.2010, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2009

Репутация: нет
Всего: нет



ну с таким циклом он выдает только 1 смайлик нулевой, который определен var s = sm[i][0]; а со старым всех и +1 вот только он постояно грузит их... надо как-то лимит поставить чтобы он в начале подсчитал сколько максимум или самому как-то поставить лимит (кол-во смайликов)...

также сама функция досихпор не работает (отсылать текст с модального окна) ниже скриншот выложил



Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  out.GIF 28,57 Kb
PM MAIL   Вверх
fleetboss
Дата 30.3.2010, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2009

Репутация: нет
Всего: нет



может кто знает как можно иначе сделать такую функцию для всех браузерах? чтобы она открывала отдельное окно или еще что-то в котором будут смайлики и нажав на них скрипт отсылает обратно текст (у каждого смайлика свой текст)

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  out.GIF 28,57 Kb
PM MAIL   Вверх
EmilRegis
Дата 31.3.2010, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 21.9.2007

Репутация: 1
Всего: 4



Цитата(fleetboss @ 30.3.2010,  14:53)
ну с таким циклом он выдает только 1 смайлик нулевой, который определен var s = sm[i][0]; а со старым всех и +1 вот только он постояно грузит их... надо как-то лимит поставить чтобы он в начале подсчитал сколько максимум или самому как-то поставить лимит (кол-во смайликов)...

также сама функция досихпор не работает (отсылать текст с модального окна) ниже скриншот выложил

ну само собой..я просто забыл добавить i++;
Код

var i=0;
var sm = new Array(["adolf",20,20], ["am",18,23],  ["angel",20,25],  ["angl",88,28],  ["aplause",31,25],  ["arrow",20,20],  ["baby",20,22]);
while(i<sm.length) {
        var s = sm[i][0];
        document.write('<IMG SRC=i/smile/'+s+'.gif WIDTH='+sm[i][1]+' HEIGHT='+sm[i][2]+' BORDER=0 ALT="'+s+'" onclick="S(\''+s+'\')" style="cursor:pointer"> ');
i++;
}

или
Код

var sm = new Array(["adolf",20,20], ["am",18,23],  ["angel",20,25],  ["angl",88,28],  ["aplause",31,25],  ["arrow",20,20],  ["baby",20,22]);
for(var i=0;i<sm.length;i++){
        var s = sm[i][0];
        document.write('<IMG SRC=i/smile/'+s+'.gif WIDTH='+sm[i][1]+' HEIGHT='+sm[i][2]+' BORDER=0 ALT="'+s+'" onclick="S(\''+s+'\')" style="cursor:pointer"> ');
}


Добавлено через 3 минуты и 45 секунд
а хотя нет, не в цикое дело)) правильно он определён был
PM MAIL   Вверх
EmilRegis
Дата 31.3.2010, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 21.9.2007

Репутация: 1
Всего: 4



держите исправленный скрипт
в основном коде для <input type="text" name="text"> задайте id="text"

в смайлах
Код

function S(name)
{
        var sData = dialogArguments;
        var text = window.opener.document.getElementById('text');
        text.focus();
        text.value = sData.value + ' :'+name+':';
}


Это сообщение отредактировал(а) EmilRegis - 31.3.2010, 10:55
PM MAIL   Вверх
fleetboss
Дата 1.4.2010, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2009

Репутация: нет
Всего: нет



че-то не хочет работать ((
а разве getElementById работает в разных файлах? я помню мучался, не работало, соединил файлы - заработало



Это сообщение отредактировал(а) fleetboss - 1.4.2010, 19:40

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  tt.GIF 11,55 Kb
PM MAIL   Вверх
EmilRegis
Дата 2.4.2010, 05:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 21.9.2007

Репутация: 1
Всего: 4



так пользуйтесь гуглом)
я вот порылся и нашёл http://forum.oszone.net/thread-90506.html
выяснилось, что window.opener не работает с ShowModalDialog
Вот так если поправить то будет работать в IE,Opera,Firefox...
Код

function S(name)
{
        if (window.opener)
            var text = window.opener.document.getElementById('text');
        else{
            var sData = dialogArguments;
            if (sData)
                var text = sData.document.getElementById('text');
            }
        text.value = name;
}


Добавлено через 1 минуту и 53 секунды
просто я потестил и var sData = dialogArguments; не работает уже в Firefox...хотя я на скорую руку проверял
PM MAIL   Вверх
fleetboss
Дата 2.4.2010, 07:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2009

Репутация: нет
Всего: нет



в Opere не работает + смайлики без :: ставит и только один, НО это я все исправил ) терь делает все четко во всех браузерах! smile
сделал else window.open (раньше почему-то там не работала отдача текста в другое окно)  smile  smile 

Это сообщение отредактировал(а) fleetboss - 2.4.2010, 07:48
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0485 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.