2010-10-21 3 views
7

Я работаю над небольшим проектом в JavaScript/jQuery.Создать новое окно с помощью jquery

Для отображения результатов расчета сделан в JavaScript, я хотел бы, чтобы открыть новое окно с каким-то предопределенным содержанием и изменением этого контент, чтобы отобразить результаты: Im используя следующий код:

var resultwindow = window.open('result.html') 
var doc = $('body', resultwindow.document); 
doc.append("<p>Result</p>") 

Это не работает, поскольку результирующий документ еще не загружен при добавлении содержимого, поэтому он перезаписывается содержимым «result.html».

Я также попытался

$(resultwindow.document).ready(function() { 
    // ... Fill result document here 
}) 

и

$(resultwindow.document).load(function() { 
    // ... Fill result document here 
}) 

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

Возможно, кто-то может указать мне в правильном направлении. Заранее спасибо!

EDIT:

я, наконец, решить, создав новый документ «вручную» в JavaScript, как:

w = window.open('','newwinow','width=800,height=600,menubar=1,status=0,scrollbars=1,resizable=1); 
d = w.document.open("text/html","replace"); 
d.writeln('<html><head>' + 
    '<link rel="stylesheet" type="text/css" href="style.cs"/></head>' + 
    +'<body></body></html>'); 
// use d to manipulate DOM of new document and display results 

Если бы я сделать то же самое сегодня (два года опыта позже), я бы использовал некоторую библиотеку шаблонов Javascript, например Handlebars, чтобы сохранить шаблон и скомпилировать его в javscript.

+0

Мартин, вы получили эту работу? У меня похожая проблема. – Shaunak

+0

@Shaunak Я опубликовал свое решение с двух лет назад, как отредактировав вопрос, также упомянул, как бы я решил сегодня ... hth. – MartinStettner

ответ

0

Отправьте данные в result.html в строке запроса, а затем отобразите данные result.html. Если вы хотите быть менее очевидным в этом, вы можете хэшировать данные в строке запроса и отображать страницу результатов.

+0

Программное обеспечение также должно работать в автономном режиме только из файловой системы (то есть без какого-либо веб-сервера). Я думаю, поэтому ваше предложение не вариант. Спасибо, в любом случае. – MartinStettner

+0

Не знаете, почему вы хотели бы создать веб-страницу или серию веб-страниц, которые на самом деле не живут на каком-то веб-сервере. – Harv

1

Проблема у вас в том, что load() не делает то, что вы думаете.

Вместо этого используйте bind("load", function() { /* Your function here */ }); тогда все должно работа.


Исправление:

load() фактически двойное использование функции - если она вызывается с функцией в качестве первого параметра, то оно связывает его с событием загрузки объекта (или объекты), в противном случае он загружает возвращенные данные (если они есть) в соответствующие элементы. См. Ответ Джоша для real причина, почему он не работает.

+1

Неправильно. ['Load'] (http://api.jquery.com/load-event/) в jQuery достаточно умен. Он запускается на основе переданных параметров. Поэтому, если вы передаете только функцию, он знает, что вы имеете в виду событие onload. Если вы передадите все необходимые параметры для вызова AJAX, он делает это. –

+0

Итак, это неправильно или это просто синтаксически дольше? – Harv

+0

@Harv Это неправильно. Нагрузка должна была отлично работать для ОП, и есть причина, по которой это не было. См. Мой ответ для подробного объяснения. –

2

Ваш вызов load не работает, потому что вы пытаетесь обрабатывать нагрузку document, и, скорее всего, документ не существует даже в этом месте. Это означает, что вы передаете null в jQuery, и он изящно игнорирует вас. Вместо этого обрабатывайте событие загрузки ссылки на исходное окно, а затем вы должны быть хорошо ...

var win = window.open("result.html"); 
$(win).load(function() { 
    $("body").append("<p>Result</p>"); 
}); 
+0

К сожалению, обработчик события никогда не вызван. Также отладчик показывает, что - по крайней мере, в Chrome - объект документа уже существует, но пуст («about: blank»). – MartinStettner