tags:

views:

1254

answers:

2

if i want to pass in my value for confirmation box!!! so lets say i want to delete item no 1 so i checked the check box then when i pressed the delete button. the popup box come out with detail item no 1 in it.

i have implemented the popup using show modal dialog (JavaScript) but i still cant get the parent value into the child form!

furthermore if i have item no 1 and item no 2 checked i want both to be displayed in the confirmation box!!

any suggestion would be greatly appreciated thx you!!!

A: 

The middle parameter for showModalDialog can be an object or an array or anything you like, and this passed object can be retrieved in the child form (say, in its OnLoad event) by referencing window.dialogArguments.

Hang on a second and I'll include a code sample (it's been about 10 years since I've done this).

Update: here is a very simple code sample that shows the basics of passing data back and forth between the parent and child windows using showModalDialog. Create two HTML files in the same folder, and name them "Parent.htm" and "Child.htm". Put this code in 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>

and put this code in 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>

Then open Parent.htm in a browser and click the "CustomConfirm" button. The child window will display the values set in the parent window ("some data 1" and "some data 2"), and when the child window is closed, whatever you've entered in the third text box will be displayed in an alert box called from the parent. This shows the basic way in which you pass data to the child and get data back from it.

There's also a way to return an object from the child window (which becomes the value returned from the showModalDialog call itself), but I don't recall how to do this.

Update 2: To pass an array instead, you would do something like this:

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

And then in the child window, you would get the array like before and use it to build your details display:

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

Since you're now passing in an array instead of an object, you'll need to return true or false (instead of adding a returnvalue property to the passed object). You set the return value in the child by setting the window.returnValue property. Since you're creating a confirmation popup, you would presumably have a "Yes" and a "Cancel" button which would set window.returnValue to true or false, respectively.

MusiGenesis
where do i put the "self"usually i put this in the place where you put obj now!!
nvr mind for the above comment and thx for the help, i was able to pass in the data, one more thing !if i want to make this code more flexible, lets say if i didnt know how many item the user will want to delete and for every item , i must make one label for its detail. can it be done in java?
@LoxZ: you don't need to pass in "self" at all. You can already access the parent window from the child window by referencing "window.opener", as in _rick_schott's answer. The second parameter in showModalDialog is intended for passing data between the parent and the child, not for passing a parent reference (which is what "self" is) to the child.
MusiGenesis
@LoxZ: sure. Instead of passing an Object() as in my above sample, you can pass an Array(), where each element in the array is the detail of an item the user has selected for deletion. I'll edit in a little code sample to demonstrate this.
MusiGenesis
+1  A: 

If you are using a popup window you can reference the parent like this:

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