Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Странные ошибки в работе jquery (https://javascript.ru/forum/jquery/10815-strannye-oshibki-v-rabote-jquery.html)

bobri4 22.07.2010 02:22

Странные ошибки в работе jquery
 
В общем работала jquery на сайте отлично, но с некоторых пор начались глюки, например при клике на ссылку с параметром onclick="insertPS('1','2')" (функция insertPS() написана в $(document).ready(function(){ ) выдает ошибку Undefined variable insertPS(), но ведь раньше все работало отлично..

в чем может быть проблема?

exec 22.07.2010 06:40

document.ready создаёт замыкание, ваша функция доступна только внутри него.
Чтобы этого избежать, используйте FD (уже без document.ready):

a(); // Всё ОК, ошибок нет
function a() {alert()};


Или вынесите функцию в глобальную область видимости (тут можно пользоваться document.ready):

window.insertPS = function () {…}

x-yuri 22.07.2010 06:40

а самому проверить? Вызывается ли $(document).ready(function(){...})...

x-yuri 22.07.2010 06:48

http://ru.wikipedia.org/wiki/Зам...вани е)
$(document).ready не создает замыкание, просто нельзя получить доступ к переменным/функциям внутри некоторой функции, если последняя их сама оттуда не вынесет. И кстати, да, зачем определять функции в $(document).ready?

Panzermaus 22.07.2010 18:37

И еще один вариант в духе unobtrusive JS. Убрать onclick="insertPS('1','2')" из разметки и написать:
$(document).ready(function(){
    function insertPS(a, b) {...}
    $('a ...').click(function() { return insertPS('1', '2'); });
}
Бонус: можно в случае чего переделать click() на live().

x-yuri 22.07.2010 18:56

при неосторожном использовании это может стать антибонусом. И тут нету ничего unobtrusive, потому что либо оно уже unobtrusive (вряд ли), либо это изменение никак не повлияло. А лучше тем, что html отделяется от js, можно даже в отдельный файл вынести

Panzermaus 22.07.2010 19:40

Цитата:

Сообщение от x-yuri
И тут нету ничего unobtrusive, потому что либо оно уже unobtrusive (вряд ли), либо это изменение никак не повлияло

Замечание верное, на obtrusivity это не повлияет, но может повлиять на ТС :) Мне тоже показалось, что вряд ли, потому и дал наводку.

Павел Третьяков 22.08.2011 10:25

Цитата:

Сообщение от x-yuri (Сообщение 64727)
http://ru.wikipedia.org/wiki/Зам...вани е)
$(document).ready не создает замыкание, просто нельзя получить доступ к переменным/функциям внутри некоторой функции, если последняя их сама оттуда не вынесет. И кстати, да, зачем определять функции в $(document).ready?

Вот столкнулся с такой же проблемой, решил просто выносить функции за document.ready. Если выносить функции, то нельзя будет воспользоваться возможностями JQuery, только чистый JavaScript

x-yuri 22.08.2011 13:45

можно


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