2013-03-16 4 views
0

Я работаю над веб-приложением, которое немного зависит от jQuery. У меня есть выбор, который структурирован как:jQuery Multi Window Access and Handlers

<select id='task_id'> 
    <option value=''>Select</option> 
    <option value='0001'>First Task</option> 
    <option value='0002'>Second Task</option> 
    <option value='addnew'>Add New...</option> 
</select> 

И у меня также есть некоторые JQuery, который открывает новое окно, когда кто-то выбирает «Добавить ...», так что они могут ввести данные на другой странице.

var newTask; 
$("select").change(function(){ 
    if($(this).val() == "addnew"){   
     if(newTask) 
      newTask.close(); 
     newTask = window.open("/projects/add-task", "newTask", "width=990,height=600"); 
    } else { 
     if(newTask) 
      newTask.close(); 
    } 

Я хочу, чтобы добавить обработчик события из родительского окна в форме кнопки отправки на дочернем окне, так что, когда кто-то отправляет форму (т.е. они Добавив), окно закроется. Что у меня есть это:

$("form", newTask.document).submit(function(){ 
     newTask.close(); 
    }); 
}); 

Просто сам по себе, он не работает, но он не бросает какие-либо ошибки. Если я открываю Chrome инспектор, и запустить следующую, строка за строкой, он ведет себя немного по-другому:

1. var newWin = window.open("/projects/new"); 

2. $("form", newWin.document).submit(function(){ 
     newWin.close(); 
    }); 

Я думаю, мои вопросы почему он не работает, если я вручную запустить его построчно через консоли, и как я могу это исправить?

ответ

0

проблема заключается в том, что newtask определен в родительском окне, и я не думаю, что вы можете получить его из дочернего окна, поэтому лучшим решением будет предварительная загрузка вашего javascript-события в add-task стр. событие будет немного отличаться:

$('#form').submit(function(){ 
    window.close(); 
}); 

этот фрагмент кода должен быть уже включен в вашу страницу дополнительных заданий. Надеюсь, это полезно.

+0

Я не пытаюсь получить доступ к родительскому окну от дочернего, но наоборот. Я знаю, что могу это сделать, потому что я сделал это вручную с Инспектором, но когда я пытаюсь использовать только скрипт, он не работает. Я думаю, что это связано с тем, что DOM не загружается в дочернем окне. – Goldentoa11

0

Я понял это. Это была проблема с тем, что DOM не был полностью загружен, когда я попытался подключить обработчик событий.

if(newTask) 
    newTask.onload = function(){ 
    $("input[type=submit]", newTask.document).click(function(){ 
     newTask.close(); 
    }); 
    }; 

Следующий вопрос: как бы я «jQuery-ify» что? Я не люблю использовать «el.onload», но я не могу делать какие-либо изменения

$(newTask.document).ready(); 

или

$(document, newTask).ready(); 

на самом деле работает.