jQuery调用函数

jQuery调用函数,jquery,ajax,function,modal-dialog,Jquery,Ajax,Function,Modal Dialog,我的模态窗口结构有问题。我有一个div,它在单击某个函数以显示模式窗口时调用该函数。在showmodel()函数内部,我调用另一个函数,如果用户单击ESC键或从文档中的任何模式窗口中单击,该函数将充当关闭函数 代码如下: $('body').on('click', '.container', function(){ showModal(); }); 单击后,将打开showModal function showModal(_this) { $('body').addClass('vi

我的模态窗口结构有问题。我有一个div,它在单击某个函数以显示模式窗口时调用该函数。在showmodel()函数内部,我调用另一个函数,如果用户单击ESC键或从文档中的任何模式窗口中单击,该函数将充当关闭函数

代码如下:

$('body').on('click', '.container', function(){
    showModal();
});
单击后,将打开showModal

function showModal(_this) {
  $('body').addClass('video-open');
  $('.popup').load(templateDir + '/views/video.html', function() {
   $(this).show();
   $('.cloaked').show();
 });
 closeModal('.modal-window');
}
在showModal中立即调用closeModal。出于某种原因,当我的意图是仅在用户单击ESC或退出模式时才触发emptyModal时,emptyModal也会立即被触发

function closeModal(selector) {
 $(document).keyup(function(e){
  if (e.keyCode == 27) {
   emptyModal(selector); 
  } 
});

$(document).click(function(e) {
 if (!$(e.target).closest(selector).length) {
   emptyModal(selector);      
  }
 });  
}
使用console.log,我可以看到“windowclosed”,并确认在closeModal被调用时会立即调用emptyModal,即使它被包装在条件语句中

function emptyModal(selector) {
 console.log('window closed')
 $(selector).empty().hide();   
 $('.cloaked').hide();
}

我认为总的来说,我对如何做我需要的事情有一个误解,而且我可能在实施过程中出错了。只是一个旁注,我将closeModal和emptyModal作为单独的函数,因为我在不同的模态视图函数中使用它们,而不是showModal函数

在closeModal函数中,不要在整个文档上放置单击事件,而是尝试将其置于.closed

$('.cloaked').click(function(e) {
 if (!$(e.target).closest(selector).length) {
   emptyModal(selector);      
  }
 }); 

如果我理解正确的话,当模态对话框打开时,具有.dopped类的元素应该在背景中显示黑色斗篷,因此单击模态对话框以外的任何位置都意味着用户正在单击具有.dopped类的元素。

Wow。这很有道理。我并没有把它归结为文档。单击功能与文档。键控功能。这确实是一个文档。单击一个,这就完美了。天才。