// JavaScript Document
/***********************************************
* 打开窗口,并且接收从窗口发送的数据。
* 支持showModalDialog和open
*
*
*
*
***********************************************/
var RHOpenConfig = {
    OpenMode: 1,  //模式定义 1:open; 2:showModalDialog; 3: 
    ReturnInput: 'RHOpenHiddenReturn'
};
var RHOpenReturnList = [];
function RHOpen(url, vArguments, winPara) {    switch (RHOpenConfig.OpenMode) {
        case 1:
            RHOpenModeOpen(url, vArguments, winPara);
            break;
        case 2:
        case 3:
        default:
            RHOpenModeDialog(url, vArguments, winPara);
            break;
    }
}function RHOpenModeOpen(url, vArguments, winPara) {
    //alert(url);
    // if(url.EndWith('&')){
    // url += 'returninput=' + RHOpenConfig.ReturnInput;
    // }else{
    // url += '&returninput=' + RHOpenConfig.ReturnInput;
    // }
    //alert(!window.IsNoOpen);
    //alert(!window.IsNoOpen && window.IsNoOpen != null);
    //alert(!window.IsNoOpen && window.IsNoOpen != null && window.IsNoOpen != 0);    if (!window.IsNoOpen && window.IsNoOpen != null && window.IsNoOpen != 0) {
        //退出        return;
    }    window.IsNoOpen = 10;
    if (winPara == "") {
        winPara = "alwaysRaised=yes,z-look=yes,location=no";
    }
    else {
        winPara = winPara + ",alwaysRaised=yes,z-look=yes,location=no";
        // alert(winPara);
    }    var WindowName = 'RHOpen' + location.hostname + '_' + location.port;
    try {
        window.open(url, WindowName, winPara); //第一种写法,需要在每个弹出页面添加window.focus(); 来实现弹出窗口始终被打开
        //var vOwn = window.open(url, "_blank", winPara);  //第二种写法,不用再每个页面添加window.focus(); 只需改为这种写法
        //vOwn.document.title = WindowName;
    }
    catch (e) {
        try {
            window.open(url, 'RHOpen', winPara);
            //var vOwn = window.open(url, "_blank", winPara);
            //vOwn.document.title = WindowName;
        }
        catch (e) {
            window.open(url, '', winPara);
        }    }
    //计时器
    setTimeout("SetOpenZiWindow()", 5000)
}//是否打开子窗口  如果0,则不打开
function SetOpenZiWindow() {
   
    if (window.IsNoOpen = 0) {
        return;
    }}function RHOpenModeDialog(url, vArguments, winPara) {
    var ReturnValue;
    if (2 == RHOpenConfig.OpenMode) {
        ReturnValue = window.showModalDialog(url, vArguments, winPara);
    } else {
        ReturnValue = window.showModelessDialog(url, vArguments, winPara);
    }    RHOpenReturnHandle(ReturnValue);
}
//需要对返回值进行处理,就继续
function RHOpenReturnHandle(returnValue) {
    for (var i = 0; i < RHOpenReturnList.length; i++) {
        RHOpenReturnList[i].call(document, returnValue);
    }
}
function RHOpenAddReturn(fn) {
    RHOpenReturnList.push(fn);
}$(document).ready(function () {
    if (null != $('#RHOpenHiddenReturn')) {
        $(document).add('<input type="hidden" id="RHOpenHiddenReturn"   />');
    }
    var HasOpener = false;
    //如果是弹出页面超时,那么就关闭弹出页面,并且刷新主页面。
    if (null != window.opener) {
        try {
            if (window.opener.location) {
                HasOpener = true;
            }
        } catch (ex) {        }
    }
    if (HasOpener) {
        window.opener.IsNoOpen = 0;
        //self.close();
    }
});
function RHClose(val) {
    //alert('RHClose(val) ' + val);
    switch (RHOpenConfig.OpenMode) {
        case 1:
            window.opener.RHOpenReturnHandle(val);
            break;
        case 2:
        case 3:
        default:
            if (window.opener != undefined) {
                //for chrome  在提交之后不能返回值
                window.opener.RHOpenReturnHandle(val);
                //alert('chrome');
            }
            else {
                window.returnValue = val;
            }
            break;
    }
    window.close();
}上面是我的代码,麻烦各位大虾帮忙看看JavaScript

解决方案 »

  1.   

    你想每点一次出一个窗口?给open的窗口的名字每次更换一下
      

  2.   


    噢,如果是按钮,在第一次触发后给其加一个disabled="disabled"属性,这样第二次,往后就不会运行事件处理函数了
      

  3.   


    噢,如果是按钮,在第一次触发后给其加一个disabled="disabled"属性,这样第二次,往后就不会运行事件处理函数了有没有科学点的方法
      

  4.   


    噢,如果是按钮,在第一次触发后给其加一个disabled="disabled"属性,这样第二次,往后就不会运行事件处理函数了有没有科学点的方法
    只要让事件只执行一次就可以。在这主题之下的办法随你想,你想要的科学
      

  5.   

    点击后移除事件。如果是夸页面。可以用cookie 保存打开窗口名称
      

  6.   

    具体的页面时这样的,多个<a> 标签,而且是循环的,所以没办法设置禁用
      

  7.   

    呵呵,解决了,是我的这段代码逻辑有问题,反了,不过还是谢谢各位
     if (!window.IsNoOpen && window.IsNoOpen != null && window.IsNoOpen != 0) {
             //退出
            return;
      }
    改为
     if (window.IsNoOpen && window.IsNoOpen>0) {
             //退出
            return;
      }