функция .click не работает для меня - PullRequest
8 голосов
/ 19 июля 2009

У меня в скрипте много функций jquery, но конкретная не работает, это моя функция

  $('#delete').click(function() {
          var id = $(this).val();
          $.ajax({
                     type: 'post',
                     url: 'update.php',
                     data: 'action=delete&id=' + id ,
                     success: function(response) {
                             $('#response').fadeOut('500').empty().fadeIn('500').append(response);
                             $(this).parent('tr').slideUp('500').empty();
                           }
                 });        
         });

аналогичная функция, как это работает

<!-- WORKING FUNCTION -->
$('#UpdateAll').click(function() {
            $.ajax({
            type: 'post',
            url: 'update.php',
            data: 'action=updateAll',

            success: function(response) {
                $('#response').fadeOut('500').empty().fadeIn('500').append(response);

                $('#table').slideUp('1000').load('data.php #table', function() {
                    $(this).hide().appendTo('#divContainer').slideDown('1000');
                });
            }
            });     
        });

Я проверил с помощью firebug, консоль не показывает никаких ошибок, я проверил HTML-источник, значения загружаются правильно, я проверил мой php-файл 5 раз, это правильно, не могу понять проблему. Пожалуйста, помогите.

Ответы [ 11 ]

34 голосов
/ 13 февраля 2012

Я боролся с ТОЧНОЙ ЖЕ ПРОБЛЕМОЙ в течение 6 часов подряд! решение состояло в том, чтобы использовать jquery 'live'.

И это все.

$('#submit').live('click',function(){
...code...
});
5 голосов
/ 19 июля 2009

С первым я бы добавил быструю и неприятную alert() в анонимную функцию щелчка, чтобы обеспечить ее запуск. Устраните причины, по которым он может не работать. Кроме того, попробуйте использовать заголовки Live HTTP или консоль Firebug, чтобы узнать, отправляется ли запрос AJAX.

Если щелчок не срабатывает, проверьте, правильно ли выбран селектор. Я часто делаю это (довольно неприятно)

var testSelector = 'p:first ul li:last';

$(testSelector).css( { border: '1px solid red' } );

Это не всегда будет видно, но если вы увидите style = "border: 1px solid red" `в сгенерированной разметке, вы знаете, что ваш селектор находится на шаре.

Возможно, у вас есть еще один щелчок, который перезаписывает его? Попробуйте использовать

$('#delete').bind('click', function() {
  // do it
});
4 голосов
/ 01 февраля 2013
$(document).on('click', '#selector', function(){
     // do something
});

jQuery 1.7+ устарел .live () и теперь использует .on () вместо:)

4 голосов
/ 14 июля 2011

У меня была та же проблема с быстрым примером, над которым я работал. Решением было поставить клик внутри $ (document) .ready. Я пытался использовать свой элемент, прежде чем он был фактически готов к использованию.

Базовый JavaScript - ждать, пока DOM не будет готов, прежде чем пытаться использовать элемент, но ... по какой-то причине я забыл это сделать, так что, возможно, с вами произошло то же самое.

1 голос
/ 27 июня 2012

Просто используйте .click с $(document).ready(function(){ ... });, потому что вы пытаетесь применить событие click к несуществующему элементу.

1 голос
/ 19 июля 2009

Я не знаю, применимо ли это к вашему контексту, но если у вас есть части страницы, которые загружаются AJAX, вам нужно будет привязать обработчики кликов после загрузки этого контента, то есть $ (документ ). уже не собирается работать. Я сталкивался с этой проблемой несколько раз, когда определенные события будут срабатывать нормально до тех пор, пока части страницы не будут перезагружены, а затем внезапно события перестают срабатывать.

0 голосов
/ 10 декабря 2012

Я думаю, что вы должны использовать функцию .on() для динамического запуска кода в jQuery, например:

$(document).on("click","#delete",function(){ });
0 голосов
/ 02 августа 2012

Есть несколько вещей, которые вы можете сделать:

  1. как предложили Элмо Галлен и Шоз Эх, введите ваш код в $(document).ready(function(){...});
  2. код вашей $('#delete').click(function(){...}); обработки событий ПОСЛЕ вашего <button> тега,
  3. используйте $('#submit').live('click',function(){...});, как предложил Парикшит Тивари.

Каждый из них должен работать нормально.

РЕДАКТИРОВАТЬ: ой, не видел, что это спросили '09: D

0 голосов
/ 19 июля 2009

Вместо id = delete я изменил его на class = delete в html и в js ('. Delete') и теперь работает нормально но при повторной попытке с идентификатором это не работает.

Спасибо всем за помощь, у меня нет никаких проблем, будь то идентификатор или класс, просто функция теперь работает.

0 голосов
/ 19 июля 2009

Это длинный выстрел, но это полезно знать. http://code.google.com/p/fbug/issues/detail?id=1948

Может не быть проблемой, если вы не используете Firefox 3.5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...