为什么我的jQuery选择器在对话框打开后失败?

时间:2014-03-19 02:08:03

标签: javascript jquery jquery-ui jquery-selectors jquery-dialog

我用这个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();
                 });
           }
   });
});

编辑:我忘了提到我的setDragDropHandler为div取代了一个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
});

正如您可以通过我的变量名称来判断,我不是这个解决方案的粉丝。任何人都可以解释为什么第一版失败了?

1 个答案:

答案 0 :(得分:0)

Blah,我的拖放处理程序在替换DOM元素之前调用了回调。糟糕...