使用javascript打开基于下拉框选择的居中弹出窗口中的链接

时间:2012-11-20 19:55:14

标签: javascript drop-down-menu popup selectedindex xhtml-transitional

我正在寻找一种解决方案,允许我将两个脚本组合在一起,让它们以跨浏览器友好的方式协同工作,并符合XHTML 1.0 Transitional标准。

第一个脚本是基于下拉选择的打开文件/位置。

这是脚本:

<script type="text/javascript">
//<![CDATA[
<!--
function go(){ 
if (document.fooform.fooselect.options[document.fooform.fooselect.selectedIndex].value != "none") { 
location = document.fooform.fooselect.options[document.fooform.fooselect.selectedIndex].value 
    } 
} 
//-->
//]]>
</script> 

这是标记:

<form name="fooform">
<select name="fooselect">
   <option selected="selected" value="#">Select a file</option>
   <option value="pdfs/somefile1.pdf">file 1</option>
   <option value="pdfs/somefile2.pdf">file 2</option>
   <option value="pdfs/somefile3.pdf">file 3</option>
   <option value="pdfs/somefile4.pdf">file 4</option>
 </select>
   <input onclick="go()" type="button" value="Get PDF" />
</form>

非常直截了当......

第二个脚本是正确的,正如标题所述,一个打开一个居中的弹出窗口。

这是脚本:

<script type="text/javascript">
//<![CDATA[
<!--
function PopupCenter(pageURL, title,w,h) {
var left = (screen.width/2)-(w/2);
var top = (screen.height/2)-(h/2);
var targetWin = window.open (pageURL, title, 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, copyhistory=no, width='+w+', height='+h+', top='+top+', left='+left);
} 
//-->
//]]>
</script>

这是标记:

<input onclick="PopupCenter('http://www.stackoverflow.com', 'popfoo',400,400);" type="button" value="Open Center Popup" />

所以我的挑战是创建一个脚本,当用户点击“获取PDF”按钮时,会打开一个包含PDF文件的居中弹出窗口,该PDF文件将根据他们从下拉列表中选择的选项而改变。

我将在页面上显示多个下拉列表,因此脚本很可能会从document.fooform.fooselect.options更改为document.form1.select1.optionsdocument.form2.select2.options等等。函数将会像go1()go2()等等......

非常感谢任何帮助/提示/建议!

更新 2012年11月22日星期四

我已经考虑过牺牲中心弹出功能而不是让这个脚本在新窗口中打开PDF,到目前为止我已尝试过:

<input type="button" value="Get PDF" onclick="window.open(go().href); return false;" />

以及

<input type="button" value="Get PDF" onclick="window.open(go(), 'USER GUIDE', 'width=500,height=300');" />

但这两个输入只是在同一个窗口中打开PDF,这就是我想要避免的。

如果我只是尝试合并上面这两个脚本,那么:

<script type="text/javascript">
//<![CDATA[
<!--
function PopupCenter(pageURL, title, w, h) {
    var left = (screen.width / 2) - (w / 2);
    var top = (screen.height / 2) - (h / 2);
    var targetWin = window.open(pageURL, title, 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, copyhistory=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left);
    }

    var go = function go() { 
if (document.fooform.fooselect.options[document.fooform.fooselect.selectedIndex].value != "none") { 
location = document.fooform.fooselect.options[document.fooform.fooselect.selectedIndex].value 
    } 
} 
//-->
//]]>
</script> 

然后使用以下输入触发器:

<input onclick="PopupCenter('go()', 'popfoo',400,400);" type="button" value="Get PDF" />

<input onclick="PopupCenter('go', 'popfoo',400,400);" type="button" value="Get PDF" />

我收到错误消息:

Windows Internet Explorer

找不到'file:/// W:/ test / go()'。确保路径或Internet地址正确无误。

[OK]

Windows Internet Explorer

找不到'file:/// W:/ test / go'。确保路径或Internet地址正确无误。

[OK]

如果我尝试在输入中没有单引号,那么

<input onclick="PopupCenter(go(), 'popfoo',400,400);" type="button" value="Get PDF" />

我收到错误消息:

Windows Internet Explorer

找不到'file:/// W:/ test / undefined'。确保路径或Internet地址正确无误。

[OK]

然后在错误消息上单击确定后,PDF将在同一窗口中打开。

请帮忙!!非常感谢提前:))

更新2 2012年11月22日星期四

在这个fiddle

中让它在IE中工作(不幸的是)

基本上改为location = document.fooform.fooselect.options[document.fooform.fooselect.selectedIndex].value并将location声明为变量(我认为这不是一个好主意,因为location是一个全局变量 - 如果有人可以对此有所了解,它会很棒)然后添加行window.open(location)

想要让它跨浏览器友好,并希望得到一些帮助tweeking新窗口调用(仍然希望将它居中,最好从新窗口中删除一些不需要的东西,如工具栏,状态栏等)

提前致谢!

1 个答案:

答案 0 :(得分:0)

不是弹出窗口的中心,而是做我需要(主要)做的事情。请参阅jsfiddle http://jsfiddle.net/77buX/

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="description" content="" />
    <meta name="keywords" content="" />
    <title>test</title>
    </head>
    <body>
        <script type="text/javascript">
            var UG1 = function getUG1() {
                if (document.form1.select1.options[document.form1.select1.selectedIndex].value != "none") {
                    var location = document.form1.select1.options[document.form1.select1.selectedIndex].value;
                    window.open(location)
                }
            }

            var UG2 = function getUG2() {
                if (document.form2.select2.options[document.form2.select2.selectedIndex].value != "none") {
                    var location = document.form2.select2.options[document.form2.select2.selectedIndex].value;
                    window.open(location)
                }
            }
        </script>
        <form action="" name="form1">
            <p class="clear">
                <select name="select1" style="width: 10.5em">
                    <option selected="selected" value="#">Select a user guide</option>
                    <option value="http://manuals.info.apple.com/en_US/ipad_user_guide.pdf">ipad user guide</option>
                    <option value="http://manuals.info.apple.com/en_US/iphone_user_guide.pdf">iphone user guide</option>
                </select>
                <input onclick="getUG1()" type="button" value="Get PDF" />
            </p>
        </form>
        <br />
        <br />
        <form action="" name="form2">
            <p class="clear">
                <select name="select2" style="width: 10.5em">
                    <option selected="selected" value="#">Select a user guide</option>
                    <option value="http://docs.blackberry.com/en/smartphone_users/deliverables/1202/userguide_bb8330_cdma.pdf">blackberry 8330 user guide</option>
                    <option value="http://cb.vu/unixtoolbox.pdf">unix toolbox</option>
                </select>
                <input onclick="getUG2()" type="button" value="Get PDF" />
            </p>
        </form>
    </body>

</html>​