Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.07.2010, 02:22
Интересующийся
Отправить личное сообщение для bobri4 Посмотреть профиль Найти все сообщения от bobri4
 
Регистрация: 23.04.2009
Сообщений: 15

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

в чем может быть проблема?
Ответить с цитированием
  #2 (permalink)  
Старый 22.07.2010, 06:40
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

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

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


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

window.insertPS = function () {…}
Ответить с цитированием
  #3 (permalink)  
Старый 22.07.2010, 06:40
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

а самому проверить? Вызывается ли $(document).ready(function(){...})...
Ответить с цитированием
  #4 (permalink)  
Старый 22.07.2010, 06:48
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

http://ru.wikipedia.org/wiki/Зам...вани е)
$(document).ready не создает замыкание, просто нельзя получить доступ к переменным/функциям внутри некоторой функции, если последняя их сама оттуда не вынесет. И кстати, да, зачем определять функции в $(document).ready?
Ответить с цитированием
  #5 (permalink)  
Старый 22.07.2010, 18:37
Аспирант
Отправить личное сообщение для Panzermaus Посмотреть профиль Найти все сообщения от Panzermaus
 
Регистрация: 14.07.2010
Сообщений: 43

И еще один вариант в духе unobtrusive JS. Убрать onclick="insertPS('1','2')" из разметки и написать:
$(document).ready(function(){
    function insertPS(a, b) {...}
    $('a ...').click(function() { return insertPS('1', '2'); });
}
Бонус: можно в случае чего переделать click() на live().
Ответить с цитированием
  #6 (permalink)  
Старый 22.07.2010, 18:56
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

при неосторожном использовании это может стать антибонусом. И тут нету ничего unobtrusive, потому что либо оно уже unobtrusive (вряд ли), либо это изменение никак не повлияло. А лучше тем, что html отделяется от js, можно даже в отдельный файл вынести
Ответить с цитированием
  #7 (permalink)  
Старый 22.07.2010, 19:40
Аспирант
Отправить личное сообщение для Panzermaus Посмотреть профиль Найти все сообщения от Panzermaus
 
Регистрация: 14.07.2010
Сообщений: 43

Сообщение от x-yuri
И тут нету ничего unobtrusive, потому что либо оно уже unobtrusive (вряд ли), либо это изменение никак не повлияло
Замечание верное, на obtrusivity это не повлияет, но может повлиять на ТС Мне тоже показалось, что вряд ли, потому и дал наводку.
Ответить с цитированием
  #8 (permalink)  
Старый 22.08.2011, 10:25
Новичок на форуме
Отправить личное сообщение для Павел Третьяков Посмотреть профиль Найти все сообщения от Павел Третьяков
 
Регистрация: 22.08.2011
Сообщений: 1

Сообщение от x-yuri Посмотреть сообщение
http://ru.wikipedia.org/wiki/Зам...вани е)
$(document).ready не создает замыкание, просто нельзя получить доступ к переменным/функциям внутри некоторой функции, если последняя их сама оттуда не вынесет. И кстати, да, зачем определять функции в $(document).ready?
Вот столкнулся с такой же проблемой, решил просто выносить функции за document.ready. Если выносить функции, то нельзя будет воспользоваться возможностями JQuery, только чистый JavaScript
Ответить с цитированием
  #9 (permalink)  
Старый 22.08.2011, 13:45
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

можно
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибки в AJAX jQuery 13rust AJAX и COMET 15 09.06.2010 11:30
jQuery jTreeMenu plugin Seafnox jQuery 9 12.01.2010 21:55
JQuery + FireFox NOOB jQuery 4 02.11.2009 18:16
Проблема при работе с плагином jQuery Map Hilight REp0rtER jQuery 3 29.07.2009 22:10
jQuery UI - странные глюки Dragable+Sortable dab512 jQuery 0 23.03.2009 08:45