Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема с вызовом функции в качестве обработчика (https://javascript.ru/forum/misc/16999-problema-s-vyzovom-funkcii-v-kachestve-obrabotchika.html)

G_M_S 02.05.2011 15:47

Проблема с вызовом функции в качестве обработчика
 
Доброго времени суток!

Есть функция, которую надо вызвать в качестве обработчика события onClick для ссылки. Выглядит так (тестовый образец, сделал на время решения проблемы):

function mb_answer1(id_msg, user_name){
  alert('TEST ' + id_msg + ' ' + user_name);
};


Прикручиваю вызов на ссылку в таком виде:

<a href="#" style="text-decoration: none;" onClick="JavaScript:mb_answer1(123, 456);">Ответить</a>


Все замечательно работает, alert выбрасывает "TEST 123 456"

НО! Вторым параметром надо передать строку, прикручиваю вызов, как он должен будет выглядеть (тело ссылки будет сформировано РНР-скриптом и в него в вызов обработчика будут прописаны нужные значения):

<a href="#" style="text-decoration: none;" onClick="JavaScript:mb_answer1(123, '456');">Ответить</a>


И функция перестет работать!!! Вываливается куча ошибок, причем в разных браузерах - разные. Конкретно в Опере (в которой я в первыю очередь все тестирую) происходит следующее:

1) При загрузке страницы выпадает

Код:

JavaScript - http://caymer_web.localhost/index.php?cat=107&mode=1&mode2=5
Inline script compilation
Syntax error at line 8 while loading:
aScript:mb_answer1(123 , '456');">О
--------------------------^
expected ';', got '456'

2) При жмакании на ссылку выпадает:

Код:

JavaScript - http://caymer_web.localhost/index.php?cat=107&mode=1&mode2=5

Uncaught exception: ReferenceError: Undefined variable: mb_answer1
Error thrown at unknown location in <anonymous function>(event):
    /* no source available */

Товарищи, хэлп!!! Замучался уже, не понимаю, в чем проблема?!! Почему число передается нормально, а строка не хочет?!!

walik 02.05.2011 18:41

<script type="text/javascript" language="javascript">
function mb_answer1(id_msg, user_name){
  alert('TEST ' + id_msg + ' ' + user_name);
};
</script>
<a href="#" style="text-decoration: none;" onclick="mb_answer1(123, '456');">Ответить</a>

Конкретно в этом примере все нормально, может все таки в вашем коде что то не так ?

G_M_S 02.05.2011 22:31

Цитата:

Сообщение от walik (Сообщение 103025)
<script type="text/javascript" language="javascript">
function mb_answer1(id_msg, user_name){
  alert('TEST ' + id_msg + ' ' + user_name);
};
</script>
<a href="#" style="text-decoration: none;" onclick="mb_answer1(123, '456');">Ответить</a>

Конкретно в этом примере все нормально, может все таки в вашем коде что то не так ?

Конкретно ЭТОТ пример я взял не с потолка. А сделал на основе готовой функции, в которую всего-то надо было добавить имя пользователя. Когда разобрался, что причина в передачи строки в качестве параметра - тогда и начал простенькие функции крутить. И вот именно в ТАКОМ виде он и не работает, вот в чем, собственно, беда.

walik 02.05.2011 22:40

У меня (Google Chrome) этот пример работает. Так же в IE 6 смотрел, тоже работает. Да и не реально что бы этот код не работал, тут нет ничего такого, что бы могло заставить выдавать ошибку.

G_M_S 03.05.2011 00:00

Конкретно этот пример, Опера 10.63, Мазилла 3.6.17 и Сафари 5.0.3 воспринимать отказываются. Просто onClick="javascript:alert('456');" работает замечательно. Ошибку, которую выдает Опера, показал выше - expected ';', got '456' Вот это меня и смущает: не скобку там или запятую, а именно ; требует почему-то.

G_M_S 03.05.2011 11:55

Все, нашел в чем проблема: не обратил внимание на номер строки с ошибкой. Ссылка в тело страницы тоже вставляется жаваскриптом и именно там и вылезала ошибка.

ЗЫ: добавил слеши экранирующие


Часовой пояс GMT +3, время: 22:57.