вызов функции JavaScript из результата формы - PullRequest
1 голос
/ 14 мая 2009

Итак, у меня есть html-страница (фактически сгенерированная с помощью php), которая создаст всплывающее окно с формой. Все мои javascript-файлы находятся в отдельном javascript-файле. Я хочу знать, возможно ли вызвать функцию из моего файла JavaScript из формы resulttext.

Вот первая html-страница

<script type="text/javascript" src="x.js"></script><h1>hello</h1>
<div id='form'>
<a href='#' onclick="makewindows('<form action="process.php" method="post" enctype="multipart/form-data "><label for="file">Filename:</label><input type="file" name="file" id="file"/> <br /><input type="submit" name="submit" value="Submit" onclick="" /></form>'); return false;">
click here</a>
</div>

После загрузки файла генерируется текст результата, который показывает имя файла. В x.js у меня есть функция для обновления div в исходном окне. ТАК, я могу назвать это с нормальной страницы HTML?

Вот код для maewindows

function makewindows(html){
child1 = window.open ("about:blank");
child1.document.write(html);
child1.document.close(); 
}

Я не хочу вызывать функцию с помощью onclick, я хочу вызывать ее из текста результата формы.

Ответы [ 5 ]

1 голос
/ 14 мая 2009

Вы хотите получить доступ к функции Javascript, объявленной на той же странице, которая открыла окно, используя window.open из скрипта, работающего в открытом окне?

window.opener это то, что вы ищете.

Например, если у вас есть функция, определенная в x.js как function foobar(s)x.js включена в главное окно), вы можете вернуть что-то вроде следующего в качестве ответа от process.php:

<script type="text/javascript">
    window.opener.foobar('returned text');
    window.close();
</script>

И строка «возвращенный текст» передается обратно в функцию foobar.

Причина, по которой это работает, заключается в том, что все, что определено с помощью ключевого слова function из глобальной области видимости, автоматически добавляется как свойство текущего объекта window. Если ваша функция не определена в глобальной области видимости, вы можете установить для нее свойство window, например:

window.foobar = function(s) { ... }
0 голосов
/ 20 мая 2009

Тобиас прав.

Но без свойства opener главное окно и целевое окно не могут общаться - нет связи.

Эта датированная статья иллюстрирует одно решение для кликов, хотя и с целями. Возможно, вам будет весело играть. http://homepage.mac.com/bigeuniverse/tests/targetwindows/

Лучше, однако, сегодня делать это с привязанными к ним слушателями и функциями. Я бы четко определил открывашку в вашей функции ' makewindows ', а также определить окно.

РОДИТЕЛИ: Как это:

var child1 = null;
function makewindows(html) 
{
    if (!child1 || child1.closed) {
       child1 = window.open(...);
       ...//rest of original code
    } else {
       child1.focus();
       /* in case it's okay to simply open the same window 
          for another upload; otherwise, nix this section*/
    }
    if (child1.opener == null) {
          child1.opener = self;
    }        
 }

РЕБЕНОК: Предположим, что в x.js есть функция с именем childListener: Ваш process.php может доставить самодельный JavaScript функция для дочерней страницы, например:

var talkToParent = function(saywhat) 
{
    opener = opener || self.opener || window.opener;
    if (opener != null  && saywhat) {
        opener.childListener(saywhat);
    }
}($uploaded_filename);

Это будет немедленно выполнено (конечно, из тегов скрипта), если загруженное имя файла было доставлено. Вы могли бы на самом деле предупредить родителя об ошибке при загрузке, если бы вы установили свой php для его доставки вместо имени файла, в этом случае. Опять же, это предполагает, что функция ' childListener ' находится в x.js или каком-либо другом скрипте, вызываемом со страницы открытия.

0 голосов
/ 14 мая 2009

Да, вы можете. Вам просто нужно вызывать его по имени, как если бы вы использовали любую функцию, определенную в самом html-файле.

0 голосов
/ 14 мая 2009

Если я правильно понимаю ваш вопрос, вы пытаетесь обновить некоторую информацию во всплывающем окне и отразилась ли эта обновленная информация на странице, открывшей всплывающее окно?

Я думаю , это может вам помочь.

0 голосов
/ 14 мая 2009

Что делают makewindows? Вы, вероятно, хотите поместить этот HTML в шаблон или отдельный файл какого-либо типа. Да, вы можете вызвать javascript из события формы, события onsubmit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...