看了些文章,实现模式窗口有两种方式。window.showModalDialog以及window.open。

一、方式介绍

window.open()支持环境: JavaScript1.0+/JScript1.0+/Nav2+/IE3+/Opera3+

showModalDialog() (IE 4+ 支持)
showModelessDialog() (IE 5+ 支持)
window.showModalDialog()方法用来创建一个显示HTML内容的模态对话框。
window.showModelessDialog()方法用来创建一个显示HTML内容的非模态对话框。

由此可见,showModalDialog是IE的语法,其他浏览器并不支持。showModalDialog很好用,但是由于这个原因,有些需要支持多种浏览器客户端的情况就不能使用这个方法。

二、window.open()基本语法:
window.open(pageURL,name,parameters) 
其中:
pageURL 为子窗口路径 
name 为子窗口句柄 
parameters 为窗口参数(各参数用逗号分隔)

三、实现模式窗口

有文章说parameters 中有一个参数modal=yes(dialog=yes效果一样),如果设定即为模式窗口。但是经笔者测试,增加这个参数,只是使弹出的窗口的最大化按钮为不可用,只是和不加该参数的唯一区别。此时,同样可以操作父窗口。这并不是我想要的模式窗口,我想要的是子窗口弹出后,在子窗口不关闭的情况下是不能操作父窗口的。最后发现很简单的一句话就可以完成这个功能,在body中加入 onBlur="window.focus();" 即可。

但是这样还是有问题的,子窗口的任何输入操作都是不被允许的,只有按钮可以点击。

修改一下:

var result= window.open("URL","window","width=600px,height=400px, modal=yes,status=no");

window.onfocus=function (){result.focus();};
      window.onclick=function (){result.focus();};

这样可以在点击父窗口的时候,将焦点赋予子窗口。

还有一个更好的通用的办法。

引用:真正能够解决Dialog问题的方案只有一个,那就是Float Iframe,用Iframe代替Window.open(),用DIV来做遮罩,控制模态。而且,这样做还有另外一个好处,那就是处理窗口间的关系变得异常容易。用户也不容易ganjue到自己被打扰了——因为你可以让Iframe加载完成时再显示出来,甚至可以加上一些特效,使得Iframe的浮出更加柔和自然。

四、操作父窗口参数

弹出窗口中:   
    
  <script>   
  window.onload=function(){   
  opener.document.all.obj.value=返回的值   
  }   
  </script>

window.open实现模式窗口的更多相关文章

  1. window.open实现模式窗口(只弹出一个window.open)

    父页面 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> & ...

  2. window.showModalDialog刷新父窗口和本窗口的方法及注意

    window.showModalDialog刷新父窗口和本窗口的方法及注意:   一.刷新父窗口的方法:    A.使用window.returnValue给父窗口传值,然后根据值判断是否刷新. 在w ...

  3. Qt中的非模式窗口配置;

    Test7_5A::Test7_5A(QWidget *parent) : QMainWindow(parent){ ui.setupUi(this); m_searchwin = new Searc ...

  4. 转:模式窗口showModalDialog的用法总结

    模式窗口showModalDialog的用法总结   最近几天一直在处理模式窗口的问题,索性写了这篇总结,以供参考: 1.打开窗口:var handle = window.showModalDialo ...

  5. [WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口

    原文:[WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口 [WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口 周银辉 现象: 大家可以试试下面这个很有趣但会带来Defect的现象:当我 ...

  6. window.open()打开新窗口教程

    使用 window 对象的 open() 方法可以打开一个新窗口.用法如下: window.open (URL, name, features, replace) 参数列表如下: URL:可选字符串, ...

  7. window.open打开新窗口被浏览器拦截的处理方法

    一般我们在打开页面的时候, 最常用的就是用<a>标签,如果是新窗口打开就价格target="_blank"属性就可以了, 如果只是刷新当前页面就用window.loca ...

  8. 模式窗口刷新不弹出新窗口触发NET事件

    最近做项目的时候用到模式窗口,这个东西我从来没有用过,事实上我是讨厌用这个东西,由于项目需要也只好忍着了.在实现的时候发现了一个问题,打开一个模式窗口后如果里面有asp.net控件并绑定有后台事件的话 ...

  9. [ucgui] 对话框7——按钮触发与模式窗口

    >_<" 模式窗口,只有结束该窗口时才能聚焦到其他的窗口上~

随机推荐

  1. Vue 实战项目开发流程

    一 基础配备 ## 一.环境搭建 #### 1.安装node - 去[官网](https://nodejs.org/zh-cn/)下载node安装包 - 傻瓜式安装 - 万一安装后终端没有node环境 ...

  2. 使用参数innodb_file_per_table支持MySQL InnoDB表数据共享空间自动收缩

    http://heylinux.com/archives/2367.html http://blog.csdn.net/ywh147/article/details/8996022 使用过MySQL的 ...

  3. Linux/Ubuntu安装搜狗输入法

    零.你首先需要安装fcitx小企鹅输入法,相信绝大部分用linux的中国人都用这个输入法,安装fcitx后同时还能解决Sublime Text的中文输入问题. 安装fcitx输入法前首先要安装fcit ...

  4. Laravel 5.2控制器--RESTful 资源控制器

    laravel的资源控制器 一.创建资源控制器 在命令行上,创建一个新的资源控制器 php artisan make:controller TestController --resource 然后在你 ...

  5. 常见的SQL调优(SQL Tuning)Tips

    建立适当的索引(参考<正确建立数据库索引的姿势>)   用UNION替换OR (适用于索引列)   用exist.not exist代替 in.not in   不要以字符格式声明数字(会 ...

  6. [转]ASCII码表及扩展ASCII码表,方便查阅

    ASCII码表可以看成由三部分组成: 第一部分:由00H到1FH共32个,一般用来通讯或作为控制之用.有些可以显示在屏幕上,有些则不能显示,但能看到其效果(如换行.退格).如下表: 第二部分:是由20 ...

  7. DML_DDL_触发器

    Oracle触发器1-介绍Oracle官方参考:PL/SQL Language Referenc->9 PL/SQL TriggerReasons to Use Trigger:■ Automa ...

  8. 快速开发android,离不开这10个优秀的开源项目

    作为一名菜鸡Android,时常瞻仰大佬们的开源项目是非常必要的.这里我为大家收集整理了10个优秀的开源项目,方便我们日常开发中学习! 作者:ListenToCode博客:https://www.ji ...

  9. Confluence 6 启用 HTTP 压缩

    在屏幕的右上角单击 控制台按钮 ,然后选择 基本配置(General Configuration) 链接. 在左侧的面板中选择 通用配置(General Configuration). 启用 HTTP ...

  10. Confluence 6 安全概述和建议概述

    这个文档是针对 Confluence 的系统管理员希望对 Confluence Web应用程序安全性进行评估而设计的.这个页面将对系统的安全进行大致的描述,同时也会对 Confluence 的安全配置 ...