Javascript.RU

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

Обработчик click вызывается несколько раз или не всегда вызывается
Добрый день,

Используем MSVS/C#/MVC2

Скрипт в динамически подгружаемом ascx (правда, он подгружается каждый раз при загрузке страницы):

Код:
<script type="text/javascript">

    $(document).ready(function () {

        $('#myGrid .my_link').live('click', function () {
            if (confirm('Вы уверены?')) {
            //
            }
        });

    });    // document ready

</script>
Есть 2 пары вариантов:
1. Заворачивать в $(document).ready(function () или нет.
2. Ставить live или просто click:
Код:
        $('#button1').click(function () {
            $.ajax({
Если не заворачиваем в document.ready, а ставим live, то почему-то нажатие срабатывает, но далеко не всегда! (Нормально работает после перезагрузки частей страницы через AJAX, а при первой загрузке страницы не реагирует).

Если ставим live внутри document.ready, диалог по confirm вызывается несколько раз!
(При старте один раз, потом после каждой перезагрузки части страницы по AJAX добавляется по разу.)

Если ставить просто click внутри document.ready, то он работает, но только если контрол подгружается при первой загрузке страницы. А если он подгружается потом, то на нажатие никто не реагирует...

Как быть? Хочется ставить обработчики именно в том файле ascx, где лежат элементы, на которые они должны навешиваться.
Читал похожие темы здесь, все только обсмеивали авторов, а что конкретно делать (устроил бы именно такой ответ!!!), толком не предлагали. Мы сейчас занимаемся углублением знаний по C#/прочим языкам и сферам, связанным с приложением, а на JS/Jquery времени катастрофически не хватает.
Ответить с цитированием
  #2 (permalink)  
Старый 21.07.2011, 20:28
Новичок на форуме
Отправить личное сообщение для Physicist Посмотреть профиль Найти все сообщения от Physicist
 
Регистрация: 26.04.2011
Сообщений: 8

Хм... Я тоже с этим столкнулся, а ответа действительно нет.
Меня лишь спасло то, что в моём примере достаточно ограничитться методом click(). А как быть с live сам несколько дней голову ломаю. Кстати у и при "$(document).ready(function ()" не всегда работало.
Ответить с цитированием
  #3 (permalink)  
Старый 21.07.2011, 20:37
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
Если не заворачиваем в document.ready, а ставим live, то почему-то нажатие срабатывает
document.ready - это событие, когда DOM (сам скелет) был полностью загружен. Лучше юзать, для надёжности.

Срабатывает не всегда (когда без document.ready), потому, что у тебя элемент на который вешает обработчик не загрузился, следовательно его нет. А срабатывает потом, что когда грузиш его второй раз - элемент уже есть.

live - этот метод делегирует события, т.е. накладывает на родителя событие, а при срабатывании смотрит на ком оно сработало (т.е. на детях)

Цитата:
Если ставим live внутри document.ready, диалог по confirm вызывается несколько раз!
Ну поставь ему return false; в конце, должно помочь.
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 21.07.2011 в 20:42.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
live click выполняется несколько раз hara jQuery 9 09.06.2010 10:58
Чтоб ссылка появлялась один раз для каждого пользователя (по IP или Cookies) Sequoia Общие вопросы Javascript 2 28.01.2010 19:16