использование javascript для открытия ссылки во всплывающем окне по центру на основе выбора раскрывающегося списка

Я ищу решение, которое позволит мне объединить два сценария и обеспечить их совместную работу в кросс-браузерной манере и в соответствии со стандартами 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.options, document.form2.select2.options и т. д., а функции будут такими, как go1(), go2() и т. д.

Любая помощь/советы/предложения приветствуются!

ОБНОВЛЕНИЕ Четверг, 22 ноября 2012 г.

Я думал о том, чтобы пожертвовать функцией всплывающего окна по центру вместо того, чтобы просто заставить этот скрипт открывать 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" />

or

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

Я получаю сообщение об ошибке:

Интернет-обозреватель Windows

Не удается найти 'file:///W:/test/go()'. Убедитесь, что указан правильный путь или интернет-адрес.

[ОК]

or

Интернет-обозреватель Windows

Не удается найти 'file:///W:/test/go'. Убедитесь, что указан правильный путь или интернет-адрес.

[ОК]

и если я попробую без одинарных кавычек на входе, вот так

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

Я получаю сообщение об ошибке:

Интернет-обозреватель Windows

Не удается найти 'file:///W:/test/undefined'. Убедитесь, что указан правильный путь или интернет-адрес.

[ОК]

а затем PDF-файл открывается в том же окне после того, как я нажимаю ОК в сообщении об ошибке.

Пожалуйста помоги!! Спасибо заранее :)

ОБНОВЛЕНИЕ 2, четверг, 22 ноября 2012 г.

Он работает в IE (только, к сожалению) в этой скрипте

В основном изменили затем location = document.fooform.fooselect.options[document.fooform.fooselect.selectedIndex].value и объявили location как переменную (что я считаю плохой идеей, поскольку location является глобальной переменной - если бы кто-то мог пролить свет на это, было бы здорово), а затем добавил строку window.open(location)

Хотелось бы сделать его кросс-браузерным и, надеюсь, получить некоторую помощь в настройке вызова нового окна (все же хотелось бы центрировать его и желательно удалить некоторые ненужные вещи из нового окна, такие как панель инструментов, панель состояния и т. д. и т. д.)

Заранее спасибо!


person cassidymack    schedule 20.11.2012    source источник
comment
Когда вы создаете разметку/javascript для всплывающего окна, сгенерируйте в нем код центрирования и выполните его. На мой взгляд, это самый простой подход для чего-то подобного. Подробная информация о наилучшем способе реализации зависит от среды размещения вашего сервера и его возможностей. Ваши сценарии foo слишком запутаны, чтобы я мог попытаться разобрать, что они на самом деле делают.   -  person SAJ14SAJ    schedule 23.11.2012
comment
Привет, @SAJ14SAJ, если я правильно понимаю, во всплывающем окне (назовем его просто popup.html в качестве примера) я должен встроить код центрирования в этот файл и заставить его выполняться при загрузке? Я знаю, как переместить окно при загрузке, то есть <script type="text/javascript">window.moveTo(0, 0);</script>, но я не уверен, как изменить размер или центрировать окно при загрузке. Кроме того, в идеале я хотел бы удалить некоторые ненужные элементы во всплывающем окне (панель инструментов, строка состояния и т. д.). Возможно ли это сделать после загрузки этого окна? Спасибо за чаевые :)   -  person cassidymack    schedule 24.11.2012
comment
P.S. извинения за мой запутанный скрипт foo. Если вы обратитесь к моей скрипке @ jsfiddle.net/77buX, это может помочь вам лучше понять, что я пытаюсь достигать. К сожалению, работает только в IE.   -  person cassidymack    schedule 24.11.2012


Ответы (1)


Не центрирует всплывающее окно, но делает то, что мне нужно (в первую очередь). См. 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>​
person cassidymack    schedule 03.12.2012