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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Opera события не работают, если функции в подгружаемых скриптах 
:(
    Опции темы
flashaa
Дата 27.9.2007, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Есть ситуация:

такая ХТМЛ-форма:

Код

...
<script language="JavaScript" src="js/index.js">//</script>
<script language="JavaScript" src="js/main.js">//</script>
<script language="JavaScript" src="js/user_cfg.js">//</script>
<script language="JavaScript" src="lib/JsHttpRequest/JsHttpRequest.js"> //</script>
...
<form onSubmit="return false;">
<input id="email" type="text" onkeypress="key_log_in(event);"><br>
<input id="login" type="button" value="отправить" onclick="log_in();">
</form>
..


функции log_in и key_log_in находятся в файле js/main.js

Данная конструкция не работает в Опере, однако в Ие и Мозилле все ок.
Пробовал содержимое функции log_in менять на {alert('aaa');} - все равно не работает.. Такое ощущение, что Опера не дружит со скриптами,  подгружаемыми через <script src=...></script>
Помогите, пожалуйста

PM MAIL   Вверх
dsCode
Дата 27.9.2007, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 565
Регистрация: 8.9.2007
Где: Saint-Petersburg

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



flashaa, все работает:

test.js

Код

function foo() {
  alert(1);
  return true;
}


index.html

Код

<html>
  <head>
    <script type="text/javascript" src="test.js"></script>
  </head>
  <body onLoad="foo()">
    <form onSubmit="return false;">
      <input id="email" type="text" onkeypress="foo();" /><br />
      <input id="login" type="button" value="отправить" onclick="foo();" />
    </form>
  </body>
</html>


Ошибка в функции, либо в подключении. Посмотрите консоль ошибок js в Опере - что там пишут?


--------------------
the .code inside
:my music
PM MAIL WWW ICQ Jabber   Вверх
flashaa
Дата 27.9.2007, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Cпасибо, вот ошибка при клике на кнопку:

Event thread: click
Error:

name: ReferenceError

message: Statement on line 1: Reference to undefined variable: log_in
Backtrace:
  Line 1 of  script 

    log_in();
  At unknown location

    [statement source code not available]

Вот ещё ошибка при определении этой функции:

Inline script compilation
Syntax error while loading: line 42 of linked script at js/index.js : 

    }

---^

Привожу эту функцию log_in, a line 42 в ней - "email" : document.getElementById("email").value
Код

function log_in() {
    
    //alert('ssd');

    spinner(1);

    JsHttpRequest.query(
    caller(), // backend
    {
        // pass a text value
        "action": func_name(arguments.callee),
        "email" : document.getElementById("email").value

    },
    // Function is called when an answer arrives.
    function(result, errors) {

        if (result["status"] == 1) {

            spinner(0);

            document.getElementById("content").innerHTML = result["out"];
            document.getElementById("help").style.display = 'block';

            //устанавливаем запрос новых сообщений по таймеру
            msgInterval = setInterval("check_msg()", 2000);



        } else {

            spinner(0);
            alert(result["status"]);

        }

    },
    true  // do not disable caching
    );
}




Это сообщение отредактировал(а) flashaa - 27.9.2007, 11:06
PM MAIL   Вверх
dsCode
Дата 27.9.2007, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 565
Регистрация: 8.9.2007
Где: Saint-Petersburg

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



flashaa, ну вот не видит значит эту функцию. Попробуйте "продебажить" с самого начала - сначала пустую функцию напишите (мой же пример работает), потом добавьте нужные вызовы, через каждую строчку поставьте alert'ы - и таким образом отловите ошибку.

P.S.: Кстати, а что такое caller(), // backend? Функция caller получает имя бэкенд-скрипта? И сама же (caller()) является параметром для JsHttpRequest.query(...). Вообще, так можно, просто.. несколько странная конструкция =)


--------------------
the .code inside
:my music
PM MAIL WWW ICQ Jabber   Вверх
flashaa
Дата 27.9.2007, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



caller возвращает имя бакенд-скрипта по URL из браузера. JsHttpRequest - библиотека для работы с AJAX написанная Дмитрием Котеровым.
http://dklab.ru

Проблема решена: оказывается Оперовский джава-скрипт не терпит задание объектов с пустыми строками:

Код

{
        // pass a text value
        "action": func_name(arguments.callee),
        "email" : document.getElementById("email").value
    }


а вот такой код работает:

Код

{ "action": func_name(arguments.callee),
   "email" : document.getElementById("email").value }

PM MAIL   Вверх
dsCode
Дата 27.9.2007, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 565
Регистрация: 8.9.2007
Где: Saint-Petersburg

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



flashaa
Цитата(flashaa @  27.9.2007,  13:16 Найти цитируемый пост)
caller возвращает имя бакенд-скрипта

ну я так и понял (из предыдущего поста)

Цитата(flashaa @  27.9.2007,  13:16 Найти цитируемый пост)
JsHttpRequest - библиотека для работы с AJAX написанная Дмитрием Котеровым

знаем такого человека и его библиотеку (да и лабораторию) в частности

Цитата(flashaa @  27.9.2007,  13:16 Найти цитируемый пост)
оказывается Оперовский джава-скрипт не терпит задание объектов с пустыми строками

сдается мне, что ошибка была где-то в другом (возможно, в кодировке файла, где находился js, может там перевод строки как-то обрабатывался криво, вот опера и не смогла прочитать), потому что так работает:

Код

<script>
function test(e) {
  var obj =
  {

// prperty test
  test: 2,

  q: 3

  };
  alert([obj.test, obj.q])
}
</script>
<body onload="test()"></body>


Это сообщение отредактировал(а) dsCode - 27.9.2007, 13:41


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


 




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


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

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