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

Javascript 为什么我的jQuery选择器在对话框打开后失败?,javascript,jquery,jquery-ui,jquery-selectors,jquery-dialog,Javascript,Jquery,Jquery Ui,Jquery Selectors,Jquery Dialog,这个jQuery选择器问题让我头疼不已。我编写了一些代码,这样当用户将文件拖动到页面中时,它会弹出一个jQuery对话框,其中显示了已拖动的文件列表以及一些用于管理列表的按钮。如果该对话框已打开,则放入的下一个文件应更新当前打开的对话框。代码如下所示: $(document).ready(function() { var updateDialog = function () { .... $("#my-selector").text(get

这个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将文件拖放到此处,但在拖放文件时将其替换。我的选择器是dialog dropzone的子级,因此它最终会被替换

当我拖入第一个文件时,对话框会很好地打开,并将正确的文本放入选择器中。当我在对话框打开时拖动后续文件时,$my selector[0]未定义,因此对话框不会更新。如果我执行以下操作,它将按预期工作:

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

从我的变量名可以看出,我不喜欢这个解决方案。有人能解释版本一失败的原因吗?

诸如此类,我的拖放处理程序在替换DOM元素之前调用了回调。哎呀…

有没有可能把它打包成一把小提琴?在项目没有太多上下文的情况下,我可以提出一个论点,根据页面的复杂程度,进行愚蠢的黑客攻击并获取对元素的引用,而不是在每次更新时扫描DOM以找到我的选择器,这样效率会更高。@sabof现在,当前页面中的文件太多。。。我看看能不能用一个简单的fiddle@Vizkos很公平。。。但是,出于我自己的启发,你知道为什么它会失败吗?假设我理解正确,这个问题只有在我的对话打开时才会出现。我建议尝试使用父元素来选择选择器,比如$myselector,someParentOnTheDOM,看看会发生什么。同样值得验证的是,我的选择器是否不是从DOM中删除的。