jQuery 选择器 returns 空

jQuery selector returns empty

我正在开发一个模态 window,它在单击按钮时使用 html() 呈现,并在使用 remove() 在 window 外部单击时删除模态。

我正在努力使这段代码可重用于多模式windows。我声明了一个全局变量 modalWindow,它应该定义 window 是否被点击。

这是我的代码:

var modalContent;
var modalContainer = $("#modal-container");
var modalWindow = modalWindow;
var body = $('body');

function pandaModal() {
  modalContent = "<div id='modal'><div id='window'></div></div></div>";
  modalWindow = $('#window');
  openModal();
}

function openModal() {
  modalContainer.html(function() {
    return modalContent;
  });
  var modal = $("#modal");
  body.addClass('noscroll');
  //var modalWindow = $("#window");
  console.log(modalWindow, ' before click');
  $(modalContainer).mouseup(function(e) {
    if (e.target.id != modalWindow.attr('id') && !modalWindow.has(e.target).length) {
      modal.remove();
      body.removeClass('noscroll');
      console.log(modalWindow, ' after click');
    }
  })
}
$(document).keyup(function(e) {
  if (e.which == 27) {
    $("#modal").remove();
    body.removeClass('noscroll');
  }
  e.stopPropagation();
});
$("body").delegate('#counter', 'click', function() {
  pandaModal();
});

这是该问题的代码笔示例:http://codepen.io/sanderfish/pen/QyzERM

var modalWindow = $("#window");openModal 中保持注释时,选择器 returns 为空。该代码在未注释时有效,但仅适用于一种模式(在本例中为 pandaModal)。

提前致谢。

今天找到了解决问题的方法,因此将其写为答案。

modalContainer.html(function() {
    return modalContent;
});

pandaModal 中声明变量 modalWindow 之后呈现。当我在上面的 html() 函数之后声明变量时,我发现代码确实有效。

我重写了我的代码如下。首先我声明了我的变量:

var modalContent;
var modalContainer = $("#modal-wrapper");
var body = $('body');
var modalWindow;

然后我写了 .on click 函数,声明应该渲染的 html,声明位于要渲染的 html 中的 modalWindow 和启动 openModal 函数。这看起来像这样:

$("#counter").on('click', function() {
    modalContent = "<div id='modal'><div id='window'></div></div>";
    modalWindow = $("#window");
    openModal();
    return false;
});

然后是渲染模态和关闭函数的函数。

function openModal() {

    $("#modal-wrapper").html(modalContent);
    var modal = $("#modal");
    var modalWindow = modal.children('div');

    body.addClass('noscroll');
    modal.center();

    $(modalContainer).mouseup(function(e) {
        if(e.target.id != modalWindow.attr('id') && !modalWindow.has(e.target).length) {
            modal.remove();
            body.removeClass('noscroll');
        }
    });

}