2013-03-16 2 views
0

저는 jQuery를 많이 사용하는 웹 응용 프로그램을 만들고 있습니다. 내가 좋아하는 구조로되어있는 선택이 있습니다jQuery 다중 창 액세스 및 처리기

<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(); 
    } 

나는 누군가가 (즉, 그들은 추가 마쳤) 양식을 제출하면되도록 자식 창에 버튼을 제출 양식에 부모 창에서 이벤트 처리기를 추가 할 창을 닫습니다. 내가 가지고있는 것은 다음과 같습니다 :

그냥 그 자체로는 작동하지 않지만 오류는 발생하지 않습니다. 나는 크롬 경위까지 열고, 라인별로 다음을 실행하면 약간 다르게 동작합니다

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

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

은 내가 수동을 통해 라인으로 라인을 실행하지 않으면 내 질문은 왜 작동하지 않습니다하는 것 같아요 콘솔, 그리고 어떻게 수정합니까?

답변

0

문제는 newtask가 부모 창에 정의되어 있으며 자식 창에서 액세스 할 수 없다고 생각하므로 최상의 솔루션은 추가 작업에서 자바 스크립트 이벤트를 미리로드하는 것입니다. 페이지. 이벤트는 약간 다를 수 있습니다.

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

이 코드 스 니펫은 이미 추가 작업 페이지에 포함되어 있어야합니다. 나는 이것이 유용하길 바란다.

+0

나는 자식 창에서 부모 창에 액세스하려고 시도하지는 않지만 그 반대의 경우입니다. Inspector를 사용하여 수동으로 수행했기 때문에 내가 할 수 있음을 알았지 만, 단지 스크립트로하려고하면 작동하지 않습니다. 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(); 

의 변화를 만들 수없는 것.