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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> скрипт не работает во всплывающем окне, ajax 
:(
    Опции темы
Lely
Дата 31.7.2010, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем здравствуйте...

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

вот в этом проверочном файле яваскрипт работает...а во всплывающем окне нет  smile ...на самом деле там все немного сложнее...но я для того чтобы тут выложить упростила...

всплывающее окно
Код

<div id="edForm" style="width:195px; height:90px;">
<script language="javascript" src="my.js" type="text/javascript"></script>
        <input id="ex" type="text" onClick="my(); alert('Hey');" name="login" size="14"/>

        <input type="password" name="pass" size="14"/>

</div>


вызываемый яваскрипт
Код

function my() { 
alert('Hey');
}


помогите пожалуйста...всю голову уже сломала...
PM   Вверх
Amphiluke
Дата 31.7.2010, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

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



Цитата(Lely @  31.7.2010,  18:16 Найти цитируемый пост)
но я для того чтобы тут выложить упростила...

Вот самое важное и потерялось.  smile  
Надо взглянуть на код, открывающий новое окно и пишущий содержимое в него. Относительный путь к скрипту "my.js" соответствует ли расположению документа, открываемого в новом окне?

Добавлено через 2 минуты и 12 секунд
Да. Еще хотелось бы поконкретнее про ошибку, а именно что пишется в консоль ошибок.
PM   Вверх
Lely
Дата 2.8.2010, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Надо взглянуть на код, открывающий новое окно и пишущий содержимое в него. 

он очень огромный, дважды взывающий к аяксу (один раз за содержимым окна, второй раз за картинкой крестика закрытия этого окна)...поэтому вкратце основные моменты...
Код

function updatePage() 

    if (request.readyState == 4) 
    { 
        if (request.status == 200) 
        {
            var fBody = document.body;
            // Затененность
            var roSpan = document.createElement("SPAN");
            roSpan.id = 'popUpSpan';
            //задаю стиль затененности
..........................

            roSpan.style.cssText = roStyle;
            fBody.appendChild(roSpan);

            // контейнер = контент всплывающего окна
            var divPop = document.createElement("DIV");
            divPop.id = 'popUpDiv';

            // Контент всплывающео окна
            var ajaxHTML = request.responseText;
            divPop.innerHTML = ajaxHTML;

            fBody.appendChild(divPop);
            //определяю ширину и высоту исходя из размеров того, что в окне и задаю стиль всплывающего окна
..........................            
            //контейнер для закрывающего крестика
            divClose = document.createElement("DIV");
            divClose.id = 'Close';

            //определяю стиль крестика
..........................

            divClose.style.cssText = CloseStyle;
            divPop.appendChild(divClose);

            // Рисунок крестика, закрывающего всплывающее окно
            callserver();
            
        } 
        else alert("status is " + request.status); 
    } 
}


Цитата

Относительный путь к скрипту "my.js" соответствует ли расположению документа, открываемого в новом окне?

вроде да...все задаю просто от корня сайта...

Цитата

Еще хотелось бы поконкретнее про ошибку, а именно что пишется в консоль ошибок. 

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

в опере мой упрощенный скриптик выдает ошибку при клике
Цитата

Uncaught exception: ReferenceError: Undefined variable: myf
Error thrown at unknown location in <anonymous function>(event):

причем это он выдает у меня уже даже при вот таком варианте скрипта, прописанном прямо во всплывающем этом окне
Код

<div id="edForm" style="width:195px; height:90px;">
<script language="javascript" type="text/javascript">
alert('Hey');
function myf(str) 

alert(str);
}
</script>
        <input id="ex" type="text" onClick="myf('ups'); alert('Hey');" name="login" size="14"/>

        <input type="password" name="pass" size="14"/>

</div>

соответственно тут тоже мой самодельный визивиг отказывается работать...но тут у него не работают кнопки...выдавая ошибки при кликах полностью аналогичные приведенной выше...+ айфреим тоже полностью нерабочий...

ну а в ИЕ все также как в опере...только ошибкой выдает при клике- "Предполагается наличие объекта"
PM   Вверх
bazzjr
Дата 2.8.2010, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 27.12.2007
Где: Россия, Пермь

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



Проблемы в синтаксисе кода JS. Как вариант стоит  попробовать отдельно создать то самое окно(DIV) и в него добавлять все что нужно – eval(ajaxHTML);

Это сообщение отредактировал(а) bazzjr - 2.8.2010, 13:38
PM MAIL ICQ   Вверх
Lely
Дата 2.8.2010, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



bazzjr, а как понять отдельно?...отдельную функцию для этого сделать, исползующую eval?
PM   Вверх
bazzjr
Дата 2.8.2010, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 27.12.2007
Где: Россия, Пермь

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



            var divPop = document.createElement("DIV");
            divPop.id = 'popUpDiv';
Вместо createElement("DIV"), создать заранее этот div


            
            var ajaxHTML = request.responseText;
            divPop.innerHTML = ajaxHTML;
Вместо этой конструкции прописать
            var ajaxHTML = request.responseText;
            eval(ajaxHTML);
PM MAIL ICQ   Вверх
Lely
Дата 2.8.2010, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

создать заранее этот div

поняла...способ может и рабочий...но мне никак не подходит - создаваться всегда должны разные divы...причем создаваться именно с использованием аякса... smile ...

разве что только отдельно передавать аяксом нтмл...потом отдельно брать яваскрипт и его eval...как вы думаете это поможет?...ведь там в нтмле еще будут всякие onClick="
PM   Вверх
Lely
Дата 2.8.2010, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



вот...я попробовала...так тоже не работает(((

Код

//предположим мы получили отдельно аяксом eval_it
            var eval_it = "alert('Hey');function myf(str){alert(str);}";
            divPop.innerHTML = eval(eval_it);
            // Контент всплывающео окна
            var ajaxHTML = request.responseText;
            divPop.innerHTML = ajaxHTML;


все тоже самое - не работает с той же ошибкой smile 
PM   Вверх
ksnk
Дата 2.8.2010, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



поиск в гугле минуты за 2 вывел вот на такой рессурс . imho - доступно.
Чтоб не возится с такими проблемами - рекомендуется использовать фреймворки. 

Вот последний комментарий в документации по фунции load. На всякий случай...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Lely
Дата 2.8.2010, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ksnk, ух ты...спасибо за ссылочку...сейчас попробую...

Добавлено через 10 минут и 30 секунд
пример с алертом заработал...а вот с неработающим во всплывающем окне айфреймом непонятки smile ...
PM   Вверх
Lely
Дата 2.8.2010, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

а вот с неработающим во всплывающем окне айфреймом непонятки

выдает такие ошибки:
ИЕ
Цитата

Сообщение: 'iframe' -  есть null или не является объектом

Опера
Цитата

Uncaught exception: TypeError: Cannot convert 'iframe' to object

Мозила
Цитата

Ошибка: iframe is null


iframe определяю в самом начале скрипта так
Код

var isGecko = navigator.userAgent.toLowerCase().indexOf("gecko") != -1;
var iframe = (isGecko) ? document.getElementById("edit") : frames["edit"];
var iWin = (isGecko) ? iframe.contentWindow : iframe.window;
iWin.document.designMode = "on";
iWin.document.execCommand("useCSS", false, true);


подскажите, в чем ошибка?
PM   Вверх
bazzjr
Дата 3.8.2010, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 27.12.2007
Где: Россия, Пермь

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



Lely, вы не правильно используете eval(), вместо " нужно ставить одинарные кавычки ' – 'alert('Hey');function myf(str){alert(str);}'
 
Я точно не уверен, но вы хотите исполнять функции, просто внедрив их посредством innerHTML.

Если я не ошибаюсь, таким образом код JS не будет исполнятся если его внедрить innerHTML, а  будет исполнятся лишь посредством eval().


Пример:
<div id="a1"></div>
<script>
var ev = 'alert("!!!");function myf(str){alert(str)};'; 
document.getElementById('a1').innerHTML = eval(ev);
myf('str');
//document.getElementById('a1').innerHTML = ev;
</script>
<input type="button" onclick="myf('str');" value="press"  />


В вашем случае вы создаете контейнер div с JS кодом(т.е. HTML и JS код  в одном флаконе), и потом все это внедряете innerHTML, так работать не будет.

Нужно "разделяй и властвуй"   smile 

Надеюсь понятно объяснил...
PM MAIL ICQ   Вверх
Lely
Дата 3.8.2010, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



bazzjr, спасибо за ответы...но я с этим уже разобралась...в рессурсе, который привел 
ksnk написано что надо выбирать яваскрипт из ответа и создавать элемент <script> на странице...я так и написала
Цитата

пример с алертом заработал...

непонятно теперь только что делать с айфреймом...и почему он с одним и тем же кодом просто на страничке работает, а во всплывающем окне нет smile 
PM   Вверх
bazzjr
Дата 3.8.2010, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 27.12.2007
Где: Россия, Пермь

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



Возможно в iFrame не указан идентификатор?

А для чего iFrame? Что значит "на страничке работает, а во всплывающем окне нет"?
PM MAIL ICQ   Вверх
Amphiluke
Дата 3.8.2010, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

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



Цитата(Lely @  3.8.2010,  02:52 Найти цитируемый пост)
iframe определяю в самом начале скрипта так

Этот код выполняется непосредственно на «верхнем» уровне, т.е. вне всяких функций? Или он выполняется по событию load объекта window? Или по какому-то иному событию? В любом случае, получается, что к моменту выполнения этого кода объект с id="edit" не существует. Если код, объявляющий переменную iframe, выполняется на «верхнем» уровне, то необходимо, чтобы объект <script>, содержащий этот код, располагался после объекта с id="edit" в дереве DOM. (Можно просто document.body.appendChild("этот_объект_script")). Ну и поскольку всё содержимое грузится в окно AJAX'ом, то, конечно, скрипт и по хронологии должен подгружаться после HTML-контента.

Вообще, конечно, можно поступить по-простому и всякий раз перед тем как в какой-то функции начинать работать с переменной iframe, проверять, а не null ли она. Если null, то инициализировать. Тогда этот код можно вынести в отдельную функцию
Цитата

Код

function initIframe() {
    isGecko = navigator.userAgent.toLowerCase().indexOf("gecko") != -1;
    iframe = (isGecko) ? document.getElementById("edit") : frames["edit"];
    iWin = (isGecko) ? iframe.contentWindow : iframe.window;
    iWin.document.designMode = "on";
    iWin.document.execCommand("useCSS", false, true);
}


и перед обращением к iframe делать проверку 
Код

try {
    if (!iframe) initIframe();
} catch(e) {
    alert("Объект с id='Edit' не существует\n"+e.message);
}


Добавлено через 4 минуты и 9 секунд
Цитата(Lely @  3.8.2010,  02:52 Найти цитируемый пост)
iframe определяю в самом начале скрипта так

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


 




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


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

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