2009-09-29 5 views
3

확인 상자에 내 값을 전달하려면! 그래서 항목 1을 삭제하고 싶다고 말하면 삭제 버튼을 눌렀을 때 체크 박스를 체크했다. 팝업 상자에 세부 항목 번호 1이 나타납니다.javascript showModalDialog를 사용하여 부모 양식에서 자식 양식으로 값을 전달하십시오.

나는 show modal dialog (JavaScript)를 사용하여 팝업을 구현했지만 여전히 자식 값을 자식 폼에 가져올 수 없습니다!

내가 항목 1과 항목 2를 확인한 경우 확인 상자에 둘 다 표시되기를 원합니다.

어떤 의견이라도 크게 부탁드립니다.

+0

귀하의 모달은 새 창입니까, 아니면 DIV입니까? –

+0

이것은 내 모달 대화 코드입니다. window.showModalDialog ('PopUp.aspx', null, '상태 : 아니요, dialogWidth : 350px, dialogHeight : 200px, dialogHide : true, 도움말 : 아니요, 스크롤 : 아니요'); –

+0

DIV를 사용하여 코드를 표시 할 수도 있습니다! –

답변

1

showModalDialog의 중간 매개 변수는 개체 또는 배열 또는 원하는 개체 일 수 있으며이 전달 된 개체는 window.dialogArguments를 참조하여 자식 폼 (예 : OnLoad 이벤트)에서 검색 할 수 있습니다.

잠깐만 기다려주세요. 코드 샘플을 포함 시키겠습니다. (이 작업을 한 지 약 10 년이되었습니다).

업데이트 : 다음은 showModalDialog를 사용하여 부모 창과 자식 창간에 데이터를주고받는 기본을 보여주는 매우 간단한 코드 샘플입니다. 동일한 폴더에 두 개의 HTML 파일을 만들고 이름을 "Parent.htm"및 "Child.htm"으로 지정합니다. parent.htm을이 코드를 넣어 :

<HTML> 
<input type=button value="CustomConfirm" 
    onclick="ShowMyDialog()"> 
<script language="javascript"> 
function ShowMyDialog() 
{ 
    var obj = new Object(); 
    obj.data1 = 'some data 1'; 
    obj.data2 = 'some data 2'; 
    showModalDialog('Child.htm', obj, ''); 
    alert(obj.returnvalue); 
} 
</script> 
</HTML> 

에이 코드를 넣어 Child.htm :

<HTML> 
<body onload="ReadPassedData()" 
    onunload="DoUnload()"> 
<input type=text id="textbox1"> 
<br> 
<input type=text id="textbox2"> 
<br> 
<br> 
Return value:<br> 
<input type=text id="textbox3" 
    value="type something"> 
</body> 
<script language="javascript"> 
function ReadPassedData() 
{ 
    var obj = window.dialogArguments; 
    var tb1 = document.getElementById('textbox1'); 
    tb1.value = obj.data1; 
    var tb2 = document.getElementById('textbox2'); 
    tb2.value = obj.data2; 
} 
function DoUnload() 
{ 
    var obj = window.dialogArguments; 
    obj.returnvalue = textbox3.value; 
} 
</script> 
</HTML> 

열기 브라우저에서 parent.htm을하고 "CustomConfirm"버튼을 클릭 . 자식 창에는 부모 창에 설정된 값 ("일부 데이터 1"및 "일부 데이터 2")이 표시되고 자식 창을 닫으면 세 번째 텍스트 상자에 입력 한 내용이 경고로 표시됩니다 상자가 부모로부터 호출됩니다. 이것은 당신이 자식에게 데이터를 전달하고 그것으로부터 데이터를 다시 얻는 기본적인 방법을 보여준다.

또한 자식 창 (showModalDialog 호출 자체에서 반환 된 값이 됨)에서 개체를 반환하는 방법이 있지만이를 수행하는 방법을 기억하지 않습니다.

업데이트 2는 :

var myarray = new Array(); 
myarray[0] = "Bob Smith"; 
myarray[1] = "Doug Jones"; 
myarray[2] = "Englebert Humperdinck"; 
var ret = showModalDialog('Child.htm', myarray, ''); 
alert(ret); // this will display whatever the child set for its 
    // window.returnValue 

그리고 자식 창에서, 당신이 예전처럼 배열을 얻을 귀하의 세부 정보를 구축하는 데 사용할 것입니다 : 당신이 이런 일을 할 것, 대신 배열을 전달하려면 디스플레이 :

var myarray = window.dialogArguments; 
alert(myarray[0]); // or whatever 

이제 개체 대신 배열을 전달하고 있기 때문에, 당신은 (대신 전달 된 개체에에 ReturnValue 속성을 추가하는) true 또는 false를 반환해야합니다. window.returnValue 속성을 설정하여 자식에서 반환 값을 설정합니다. 확인 팝업을 만들므로 window.returnValuetrue 또는 false으로 각각 설정하는 "예"및 "취소"버튼이있을 것입니다.

+0

어디서 "자기"를 넣을까요? 보통 obj를 넣는 곳에 이것을 넣습니다 !! 위의 덧글에 대한 –

+0

nvr 마음과 도움을위한 thx, 나는 데이터를 한 번 더 전달할 수있었습니다! 이 코드를 좀 더 융통성있게 만들고 싶다면 사용자가 얼마나 많은 항목을 삭제할지, 모든 항목에 대해 알고 싶다면 해당 레이블에 대해 하나의 레이블을 만들어야한다고 말할 수 있습니다. 그것은 자바에서 할 수 있습니까? –

+0

@LoxZ : "자기"를 전혀 전달할 필요가 없습니다. _rick_schott의 대답처럼 "window.opener"를 참조하여 자식 윈도우에서 부모 윈도우에 액세스 할 수 있습니다. showModalDialog의 두 번째 매개 변수는 상위 참조와 하위 참조간에 데이터를 전달하기위한 것이지 상위 참조 (즉, "self"가 무엇인지)를 자식에게 전달하는 것이 아닙니다. – MusiGenesis

1

팝업 창을 사용하는 경우이 같은 부모를 참조 할 수 있습니다

window.opener.document.getElementById("whatever").value = whatever; 
0

한다고 가정 우리는 다음과 같이 버튼을 포함하고 다음 스크립트 및 실행하고있는을 호출되는 WindowTrigger.aspx이 showModalDialog를 사용하여 새 페이지 WindowContainer.aspx를 엽니 다.

 <asp:Button ID="btnDate" Text="Display Window" OnClientClick="WindowOpen()"  runat="server" /> 

<script language="javascript" type="text/javascript"> 
     function WindowOpen() { 
      var theAdmin = new Array(); 
      theAdmin["id"] = ''; 
      theAdmin["name"] = ''; 
      var winopts = "dialogWidth:290px;dialogHeight:220px;scroll:no;resizable:no;status:no;unadorned:yes"; 

      var admStatus = window.showModalDialog("http://localhost:51836/WindowContainer.aspx", theAdmin, winopts); 
      alert(theAdmin["id"]); 
      alert(theAdmin["name"]); 
     } 
    </script> 

위의 스크립트는 그림과 같이 2 차 인수를 사용하여 자식 창에 전달되는 배열 선언 'theAdmin'를 포함

다음 코드는 클릭에 목록 상자와 버튼을 포함 WindowContainer.aspx에 버튼의 해당 인수는 목록 상자의 해당 선택된 텍스트 및 선택한 값으로 초기화됩니다.

<asp:ListBox ID="ddlUsers" runat="server" Rows="10" SelectionMode="Multiple"> 
     <asp:ListItem Text="Chennai" Value="044"></asp:ListItem> 
     <asp:ListItem Text="Hyderabad" Value="040"></asp:ListItem> 
     </asp:ListBox> 
    <asp:Button ID="btnDate" Text="Date" OnClientClick="submitForm()" runat="server" /> 

<script language="javascript" type="text/javascript"> 
     function submitForm() { 
      var lstAdmins = document.getElementById('ddlUsers'); 
      var SelectedIDs = ""; 
      var SelectedNames = ""; 
       if (lstAdmins != null) { 
        for (i = 0; i < lstAdmins.options.length; i++) { 
         if (lstAdmins.options[i].selected) { 
          if (SelectedIDs == '') 
           SelectedIDs = lstAdmins.options[i].value; 
          else 
           SelectedIDs += ";" + lstAdmins.options[i].value; 

          if (SelectedNames == '') 
           SelectedNames = lstAdmins.options[i].text; 
          else 
           SelectedNames += ";" + lstAdmins.options[i].text; 
         } 
        } 
       } 
      var theAdmin = dialogArguments; 
      theAdmin["id"] = SelectedIDs; 
      theAdmin["name"] = SelectedNames; 
      window.returnValue = "OK"; 
      self.close(); 
     } 

    </script> 

이제 출력은 "044; 040;"이됩니다. 와 "Chennai, Hyderabad;" 이러한 방식으로 부모 폼에서 자식 폼으로 값 (여기서는 theAdmin)을 전달할 수 있으며 결과를 부모 폼에서도 사용할 수 있습니다 (매개 변수의 범위가 손실되지 않음).

관련 문제