Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript未更新模式弹出窗口上的css属性_Javascript_Jquery_Css_Asp Classic_Modal Dialog - Fatal编程技术网

javascript未更新模式弹出窗口上的css属性

javascript未更新模式弹出窗口上的css属性,javascript,jquery,css,asp-classic,modal-dialog,Javascript,Jquery,Css,Asp Classic,Modal Dialog,我有以下javascript代码: <script type="text/javascript"> function doPopup(file){ var dlg=$('#popup').dialog({ resizable: false, autoOpen: false, modal: true, hide: 'fade', position: ['center', 'center'] });

我有以下javascript代码:

<script type="text/javascript">
  function doPopup(file){
    var dlg=$('#popup').dialog({
      resizable: false,
      autoOpen: false,
      modal: true,
      hide: 'fade',
      position: ['center', 'center']
    });

    dlg.load(file, function(){
      dlg.dialog('open');
    });

    var maskHeight = $(document).height();
    var maskWidth = $(window).width();
    $('#mask').css({'width':maskWidth, 'height':maskHeight});
    $('#mask').fadeTo("slow", 0.85);

    dlg.parent().css('z-index', 9001);
    dlg.parent().css('position', 'absolute');
    //alert('I'm an alert');

    if(file.indexOf("CustomerCouponDisplay.asp" !== -1)) {
      var imgWidth = $('#couponImg').width();
      var winW = $(window).width();
      dlg.parent().css('left', (winW - imgWidth)/2);
    }
  }
</script>
本质上,当调用此函数时,它会接收网页的文件名,并在模式弹出窗口中显示内容

当代码按原样运行时,通常预期的行为会按照计划发生:mask div接管屏幕,逐渐变暗,弹出窗口显示

问题是:我们的优惠券图像对于弹出div来说太大了,所以我有一个if语句,它会自动在屏幕上重新居中显示弹出窗口。然而,这种重新定心的情况从未发生过,尽管代码正在执行

有趣的是:如果我取消对该警报的注释,图像仍然会偏离中心显示。单击“确定”以解除警报后,屏幕将重新绘制,图像现在将根据需要居中

我尝试了很多方法,包括访问弹出窗口的父对象的不同方法,为css提供参数的不同方法,将popup.parent.css行放在许多不同的位置,硬编码“left”值,只有在加载所有内容并更新css后才打开对话框。这一行破坏了所有内容,还有其他一些也不起作用的事情

我现在的想法是:我在一篇不太相关的帖子中看到,一些CSS样式没有被更新的原因是因为动画太长或类似的东西。我肯定是在对话框和掩码褪色的情况下重写html,所以这可能与“left”属性没有接管有关吗

我拒绝我目前的想法:我觉得情况并非如此,因为就在我尝试设置“left”属性之前,我已经成功地为同一组件设置了其他属性,并且它们毫无问题地生效。如果是fadeTo系列,我甚至把它移到了底部。同样的事情发生了:警报关闭后才居中

想法


编辑:很可能这是相关的,这是在ASP页面上运行的。它不是.NET。

线索是警报。它显示尝试调整大小的代码在加载和打开对话框之前发生

尝试将用于操作对话框的代码放入事件处理程序中以打开对话框


您是否尝试过使用dlg.dialog'open';将其余代码放入.load回调中;?当坏代码被警报修复时,它可能表示异步代码问题……我没有,并且将立即尝试这样做。编辑:将代码放在dlg.dialog'open'之前;什么都不做,这是我预料的。将其置于该行之后会导致遮罩淡入黑暗,但弹出窗口根本不会出现。Firebug没有报告任何问题。@nnnnnn还有其他想法吗?我的javascript技能糟糕透了;我大约一个月前才开始使用它,所以我不知道它有什么异步执行的特性。嗯,.load函数是异步部分-只有在dopoup函数的其余部分和调用它的任何部分完成执行后,才会调用带有dlg.dialog“open”的回调。问题中的图像是否由该加载调用加载?它的宽度可能在整个图像下载后才知道,这可能在.load回调后才完成。如果发生这种情况,您可能需要从.load Ajax函数回调中将load事件处理程序附加到映像。抱歉,没有骰子。我得到了一个很好的淡入黑暗的效果,但是没有弹出窗口,这是因为我复制和粘贴了,没有注意到变量dlg在那一点上是未定义的。更新。我做了同样的事情:/。不幸的是,它仍然不起作用。dialogParent.parent我想指向了错误的组件,但我还是尝试了…没有骰子。淡入黑暗,但现在我的页面左侧有一个巨大的空白,没有弹出窗口。删除.parent后,我得到了与以前相同的行为:淡入黑暗,没有弹出窗口。
function doPopup(file){
    var dlg=$('#popup').dialog({
      resizable: false,
      autoOpen: false,
      modal: true,
      hide: 'fade',
      position: ['center', 'center'],
      open:  function () {
         var dialogParent = $(this).parent();
         var maskHeight = $(document).height();
         var maskWidth = $(window).width();
         $('#mask').css({'width':maskWidth, 'height':maskHeight});
         $('#mask').fadeTo("slow", 0.85);

        dialogParent.css('z-index', 9001);
        dialogParent.css('position', 'absolute');

        if(file.indexOf("CustomerCouponDisplay.asp" !== -1)) {
            var imgWidth = $('#couponImg').width();
           var winW = $(window).width();
          dialogParent.css('left', (winW - imgWidth)/2);
        }
      }
    });

    dlg.load(file, function(){
      dlg.dialog('open');
    });

}