Почему мой селектор jQuery перестает работать после открытия диалога?

0

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

$(document).ready(function() {
    var updateDialog = function () {
            ....
            $("#my-selector").text(getMyString());
    }; 
    setDragDropHandler("#main-dropzone", function (f) {
           doSomethingWithFiles(f);
           $("#my-dialog").dialog("open");
   });
   $("#my-dialog").dialog({
           ...
           open: function () {
                 updateDialog();
                 setDragDropHandler("#dialog-dropzone", function (f) {
                          doSomethingWithFiles(f);
                          updateDialog();
                 });
           }
   });
});

EDIT: Я забыл упомянуть, что мой setDragDropHandler берет селектор для div, который он заменяет div, в котором говорится "Отбросьте файлы здесь" с помощью replaceWith пока файлы перетаскиваются, но затем заменяет его при удалении файлов. #my-selector - дочерний элемент #dialog-dropzone, поэтому он заканчивается тем, что его заменяют.

Когда я перетаскиваю первый файл, диалоговое окно открывается отлично и помещает нужный текст в # my-selector. Когда я перетаскиваю следующий файл, в то время как диалог открыт, $("#my-selector")[0] не определен, поэтому диалог не обновляется. Если я делаю следующее, он работает так, как ожидалось:

$(document).ready(function() {
    var stupidHack = $("#my-selector");
    var updateDialog = function () {
            ....
            stupidHack.text(getMyString());
    }; 
    // rest is the same
});

Как вы можете сказать по моему имени переменной, я не являюсь поклонником этого решения. Может ли кто-нибудь объяснить, почему одна версия не удается?

  • 0
    Есть ли шанс, что это можно упаковать в скрипку?
  • 0
    Не имея большого контекста проекта, я мог бы привести аргумент, что, в зависимости от сложности вашей страницы, более эффективно делать «глупый хак» и получать ссылку на ваш элемент вместо того, чтобы сканировать DOM, чтобы найти # my-selector при каждом обновлении.
Показать ещё 4 комментария
Теги:
jquery-selectors
jquery-dialog

1 ответ

0

Бла, мой обработчик перетаскивания вызывал обратный вызов перед заменой элементов DOM. К сожалению...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню