在正文单击时关闭简单的 jQuery 弹出窗口

Posted

技术标签:

【中文标题】在正文单击时关闭简单的 jQuery 弹出窗口【英文标题】:Close simple jQuery popup on body click 【发布时间】:2016-02-18 04:04:59 【问题描述】:

我有一个简单的 jQuery 弹出窗口,它获取您的 ip,然后根据您的位置显示某些信息。地理位置。我正在努力做到这一点,所以当你点击身体上的任何地方时,它会关闭弹出窗口。由于某种原因,这不起作用。

<div style="display:none;">
  <div id="message" style="padding:30px;">
    <h1>Hola!</h1>
    <p>You are in US</p>
  </div>  
</div>



jQuery.ajax(  
  url: '//freegeoip.net/json/', 
  type: 'POST', 
  dataType: 'jsonp',
  success: function(location) 
    jQuery('#city').html(location.city);
    jQuery('#region-code').html(location.region_code);
    jQuery('#region-name').html(location.region_name);
    jQuery('#areacode').html(location.areacode);
    jQuery('#ip').html(location.ip);
    jQuery('#zipcode').html(location.zipcode);
    jQuery('#longitude').html(location.longitude);
    jQuery('#latitude').html(location.latitude);
    jQuery('#country-name').html(location.country_name);
    jQuery('#country-code').html(location.country_code);
  
 );

jQuery.ajax(  
  url: '//freegeoip.net/json/', 
  type: 'POST', 
  dataType: 'jsonp',
  success: function(location) 

    if (location.country_code === 'US') 

      $('#message').parent().show();
    
  
 );

jQuery('html') //set for html for jsfiddle, but should be 'body'
              .bind(
               'click',
               function(e)
            if(
             jQuery('#message').dialog('isOpen')
             && !jQuery(e.target).is('.ui-dialog, a')
             && !jQuery(e.target).closest('.ui-dialog').length
            )
             jQuery('#message').dialog('close');
            
               
              );

【问题讨论】:

【参考方案1】:

当您实例化 jquery UI 对话框时,您需要将 close 方法绑定到您想要触发关闭对话框的节点。

  // instantiate the dialog
  $(function() 
    $("#dialog").dialog(
      open: function() 

        // if condition is met then bind click to the body and close the dialog  

            jQuery('body').bind('click', function() 
              jQuery('#dialog').dialog('close');
            )

       // end if

      
    );
  );

  jQuery.ajax(
    url: '//freegeoip.net/json/',
    type: 'POST',
    dataType: 'jsonp',
    success: function(location) 
      jQuery('#city').html(location.city);
      jQuery('#region-code').html(location.region_code);
      jQuery('#region-name').html(location.region_name);
      jQuery('#areacode').html(location.areacode);
      jQuery('#ip').html(location.ip);
      jQuery('#zipcode').html(location.zipcode);
      jQuery('#longitude').html(location.longitude);
      jQuery('#latitude').html(location.latitude);
      jQuery('#country-name').html(location.country_name);
      jQuery('#country-code').html(location.country_code);
    
  );

  jQuery.ajax(
    url: '//freegeoip.net/json/',
    type: 'POST',
    dataType: 'jsonp',
    success: function(location) 

      if (location.country_code === 'US') 

        $('#message').parent().show();
      
    
  );
<div id="dialog">
  <div id="message" style="padding:30px;">
    <h1>Hola!</h1>
    <p>You are in US</p>
  </div>  
</div>

【讨论】:

嗨@JeffRodger 当我为你编写代码时它在codepen中工作。除了不工作之外,您还有其他事情要做吗?你的控制台说什么? 这里是随附的 codepen,与您的代码完全相同:codepen.io/anon/pen/rxgOEW 在文本之外单击,没有任何内容消失。 @JeffRodger 您的代码笔没有添加 jquery 和 jquery UI,您希望它如何工作?我已经为你更新了这个,请查看工作代码笔:codepen.io/anon/pen/ZQNoga尝试点击蓝色区域中的任意位置。

以上是关于在正文单击时关闭简单的 jQuery 弹出窗口的主要内容,如果未能解决你的问题,请参考以下文章

尝试通过单击打开它的 div 中断按钮外部来关闭弹出窗口

关闭按钮单击jquery模式弹出窗口

单击 uibutton 时关闭弹出窗口

当用户在弹出窗口之外点击时,防止 JQuery Mobile 关闭弹出窗口

关闭表单提交时打开的弹出窗口并触发单击父窗口

自动打开弹出窗口的最简单方法? [关闭]