jQuery - использовать live вместо привязки?

Я использую plupload и хочу динамически обновлять свою галерею (jquery.ajax()), где я использую лайтбокс и т. д. (другими словами, я хочу, чтобы js работал в загруженном контенте ajax), когда все файлы загружены.

Что я делаю сейчас, это

var upload = $el.pluploadQueue();
upload.bind('UploadComplete',function(){
//ajax & etc
}

Конечно, .bind() не для будущих элементов, и я попытался изменить его на .live() (upload.live('UploadComplete',function(){), но почему-то событие не выполняется.

Я также пробовал с .on():

$(document).on('UploadComplete', upload, function() {

и delegate:

$(document).delegate(upload, 'UploadComplete', function() {

но то же самое, что и live()

Что я делаю неправильно?


person user2081339    schedule 27.04.2013    source источник


Ответы (2)


Не используйте live, он устарел (и мертв с версии 1.9). Вместо этого используйте on или, может быть, delegate. Из http://api.jquery.com/live/:

Начиная с jQuery 1.7, метод .live() устарел. Используйте .on() для присоединения обработчиков событий. Пользователи более старых версий jQuery должны использовать .delegate() вместо .live().

person jsalonen    schedule 27.04.2013
comment
Я тоже пробовал с ними, но безрезультатно. Можете ли вы привести пример, как это upload.bind('UploadComplete',function(){ должно выглядеть с delegate? - person user2081339; 28.04.2013
comment
Хорошо, вы упомянули, что используете plupload. Здесь может быть что-то еще. Я подозреваю, что проблема не в привязке, а где-то еще в коде. Я бы начал с двойной проверки того, что плагин plupload инициализирован и используется правильно. - person jsalonen; 28.04.2013
comment
live мертв с версии 1.9, не устарел, а удален! - person gdoron is supporting Monica; 28.04.2013
comment
Я упомянул plupload с самого начала. Я дважды и трижды проверил все, и я не могу понять, почему это работает только с .bind(). Могу ли я делать то, что мне нужно, используя bind()? Каждая идея будет оценена. БЛАГОДАРНОСТЬ! - person user2081339; 28.04.2013
comment
@gdoron Я пытался использовать вот так - $(document).on('UploadComplete', upload, function() {, но снова событие не выполняется. Вот почему я спросил, например, используя delegate или on. - person user2081339; 28.04.2013
comment
@user2081339, $(document).on('UploadComplete', '{selector}', function() { - person gdoron is supporting Monica; 28.04.2013
comment
какой у меня селектор? разве это не upload? - person user2081339; 28.04.2013
comment
Смотрите другой ответ. Похоже, что bind здесь даже не из jQuery. - person jsalonen; 28.04.2013

Хотя на первый взгляд метод bind выглядит как jQuery bind, быстрый поиск в Plupload API показывает он реализует собственный метод bind, который просто иметь ту же подпись, что и версия JQuery. Таким образом, ваш исходный код в порядке и не использует устаревшие функции.

Редактировать:

Кажется, есть два вопроса: является ли bind устаревшим (ответ в предыдущем абзаце) и как я могу отобразить загруженное изображение после завершения загрузки. Что касается второго вопроса, надеюсь, этот пример поможет вам начать работу:

uploader.bind('UploadComplete', function(up, files) {
  $.each(files, function(index, file) {
    var img = $("<img />").attr('src', 'http://your-url.com/your-upload-directory/' + file.name);
    img.load(function() {
      //add lightbox specific code here
      $('.img-container').append(img);
    });
  });
});

Если вам нужна более конкретная помощь с отображением изображений, вам придется обновить свой вопрос с более подробными примерами кода.

person ljfranklin    schedule 27.04.2013
comment
Хорошо :) Большое спасибо, что сообщили нам, но как я могу решить свою проблему? - person user2081339; 28.04.2013
comment
@user2081339 user2081339 - Не уверен, что понял ваш вопрос. Похоже, ваш исходный код работает, но вы беспокоились о том, чтобы полагаться на функцию, которая скоро будет удалена. В то время как jQuery bind удален в более поздних версиях, Plupload bind (совершенно несвязанный метод) не имеет упоминания об устаревании в файле API. - person ljfranklin; 28.04.2013
comment
моя проблема: я не могу использовать javascript в содержимом, загруженном с помощью ajax - лайтбокс и т. д. - person user2081339; 28.04.2013
comment
@user2081339 user2081339 - Обновлен мой ответ, чтобы указать, как отображать изображение после завершения загрузки. - person ljfranklin; 28.04.2013
comment
спасибо, что уделили время, но я хочу обновить всю свою галерею, потому что я разделяю файлы по их размеру, расширению и т. д. Идеи? - person user2081339; 28.04.2013
comment
Каждый объект file имеет свойства size и name. Я предлагаю прочитать API и отредактировать свой вопрос, чтобы он был более подробным, если вам нужна дополнительная помощь. - person ljfranklin; 28.04.2013