Passing Values Between Frames

Discussion in 'Javascript' started by Guest, Dec 11, 2005.

  1. Guest

    Guest Guest

    Hi,
    1st, I did a search and could not find any info on this, the Google results
    were good, but I'm still have issues...So any help will be great.
    I have a frame page, which contains 3 frames (Left, Content, and Footer)

    In the content page, I have a checkbox, which value is a number (i.e. 500).
    I would like that, when a user clicks on this checkbox, it will send the
    value to my LEFT frame.
    My left frame has an array, where I'm going to keep track of these
    numbers, and then display the total.
    I'm at the point were I can send the value to the left frame but only using
    'parent.left.document.write.(user_input)
    I can't send the value to another variable in the left frame nor can I
    reference the variable (content frame) from the left frame side

    below is part of my code... I hope this helps.
    //FRAME PAGE
    <frameset cols="110,*" border="0">
    <frame src="nav.html" name="left"/>
    <frameset rows="*,50">
    <frame src="mainpage.html" name="content"/>
    <frame src="footer.html" name="footer"/>
    </frameset>
    </frameset>
    ------------------------------------------------------------------
    //ARRAY ON NAV page

    var numb = new Array();

    numb[0] = "0"
    numb[1] = "0"
    numb[2] = "0"
    numb[3] = "0"
    numb[4] = "0"
    numb[5] = "0"
    numb[6] = "0"
    numb[7] = "0"
    numb[8] = "0"
    numb[9] = "0"

    var total = parseFloat(numb[0]+parseFloat(numb[1]+parseFloat(numb[2]...etc
    ------------------------------------------------------------------------

    THE CONTENT PAGE WHERE I WILL BE GETTING THE VALUES FROM to pass to the NAV
    page

    <form name="cartform" action="#">
    <input type="checkbox" value="500" name="option1"
    onclick="checkedbox(this)" />Add to Cart
    </form>

    <script type="text/javascript">
    function checkedbox(userfield){
    {
    if (document.cartform.option1.checked)
    {
    user_input =
    parent.content.document.cartform.option1.value
    parent.left.document.write(user_input)
    }
    }
    }
    </script>

    I'm really stuck here, I've tried all kinds of calls, and keep getting the
    same error (value is null or not a an object)\
    Any help would be greatly appreciated...

    Thanks
    Joe D.
    Guest, Dec 11, 2005
    #1
    1. Advertising

  2. Guest

    Lee Guest

    <jc said:
    >
    >Hi,
    >1st, I did a search and could not find any info on this, the Google results
    >were good, but I'm still have issues...So any help will be great.
    >I have a frame page, which contains 3 frames (Left, Content, and Footer)
    >
    >In the content page, I have a checkbox, which value is a number (i.e. 500).
    >I would like that, when a user clicks on this checkbox, it will send the
    >value to my LEFT frame.
    > My left frame has an array, where I'm going to keep track of these
    >numbers, and then display the total.
    >I'm at the point were I can send the value to the left frame but only using
    >'parent.left.document.write.(user_input)
    >I can't send the value to another variable in the left frame nor can I
    >reference the variable (content frame) from the left frame side



    >//ARRAY ON NAV page
    >
    >var numb = new Array();
    >
    > numb[0] = "0"
    > numb[1] = "0"
    > numb[2] = "0"
    > numb[3] = "0"
    > numb[4] = "0"
    > numb[5] = "0"
    > numb[6] = "0"
    > numb[7] = "0"
    > numb[8] = "0"
    > numb[9] = "0"
    >
    >var total = parseFloat(numb[0]+parseFloat(numb[1]+parseFloat(numb[2]...etc


    How are you trying to assign these values from the content frame?
    If a box is checked, where in array "numb" are you trying to put it?
    What triggers your code to recalculate the total?
    If you convert the values to numbers before you put them into the
    array, you won't need to use parseFloat() at all. If you do use it,
    it should be as:
    total = parseFloat(numb[0])+parseFloat(numb[1])+...
    Using parseFloat after you've performed even one "+" operation is
    too lage.





    >------------------------------------------------------------------------
    >
    >THE CONTENT PAGE WHERE I WILL BE GETTING THE VALUES FROM to pass to the NAV
    >page
    >
    ><form name="cartform" action="#">
    > <input type="checkbox" value="500" name="option1"
    >onclick="checkedbox(this)" />Add to Cart
    ></form>
    >
    ><script type="text/javascript">
    > function checkedbox(userfield){
    > {
    > if (document.cartform.option1.checked)
    > {
    > user_input =
    >parent.content.document.cartform.option1.value
    > parent.left.document.write(user_input)
    > }
    > }
    > }
    ></script>
    >
    >I'm really stuck here, I've tried all kinds of calls, and keep getting the
    >same error (value is null or not a an object)\
    >Any help would be greatly appreciated...
    >
    >Thanks
    >Joe D.
    >
    >
    >
    Lee, Dec 12, 2005
    #2
    1. Advertising

  3. Guest

    RobG Guest

    <jc wrote:
    > Hi,
    > 1st, I did a search and could not find any info on this, the Google results
    > were good, but I'm still have issues...So any help will be great.
    > I have a frame page, which contains 3 frames (Left, Content, and Footer)
    >
    > In the content page, I have a checkbox, which value is a number (i.e. 500).
    > I would like that, when a user clicks on this checkbox, it will send the
    > value to my LEFT frame.
    > My left frame has an array, where I'm going to keep track of these
    > numbers, and then display the total.
    > I'm at the point were I can send the value to the left frame but only using
    > 'parent.left.document.write.(user_input)
    > I can't send the value to another variable in the left frame nor can I
    > reference the variable (content frame) from the left frame side
    >
    > below is part of my code... I hope this helps.
    > //FRAME PAGE
    > <frameset cols="110,*" border="0">
    > <frame src="nav.html" name="left"/>
    > <frameset rows="*,50">
    > <frame src="mainpage.html" name="content"/>
    > <frame src="footer.html" name="footer"/>
    > </frameset>
    > </frameset>
    > ------------------------------------------------------------------
    > //ARRAY ON NAV page
    >
    > var numb = new Array();
    >
    > numb[0] = "0"
    > numb[1] = "0"
    > numb[2] = "0"
    > numb[3] = "0"
    > numb[4] = "0"
    > numb[5] = "0"
    > numb[6] = "0"
    > numb[7] = "0"
    > numb[8] = "0"
    > numb[9] = "0"


    If you want to initialise an array with 10 elements with values of zero,
    then the following is much more concise:

    var numb = [];
    for (var i=0; i<10; i++){
    numb = 0;
    }


    But it is completely unnecessary, what you seem to need is an object:

    var numbObj = {};


    >
    > var total = parseFloat(numb[0]+parseFloat(numb[1]+parseFloat(numb[2]...etc


    To add all the values of the array numb, use a function like:

    function sumArray(a)
    {
    var x=0, i=a.length;
    while (i--){
    x += +a;
    }
    return x;
    }


    But since I've suggested an object, use:

    function sumObj(a)
    {
    var x=0;
    for (var prop in a){
    x += +a[prop];
    }
    return x;
    }

    The unary operator '+' just before the variable ensures it is converted
    to a number and replaces your use of parseInt.


    > ------------------------------------------------------------------------
    >
    > THE CONTENT PAGE WHERE I WILL BE GETTING THE VALUES FROM to pass to the NAV
    > page
    >
    > <form name="cartform" action="#">
    > <input type="checkbox" value="500" name="option1"
    > onclick="checkedbox(this)" />Add to Cart
    > </form>


    Indent posted code using 2 (preferred) or 4 spaces and wrap manually at
    about 70 characters to prevent auto-wrapping.


    >
    > <script type="text/javascript">
    > function checkedbox(userfield){
    > {
    > if (document.cartform.option1.checked)
    > {
    > user_input =
    > parent.content.document.cartform.option1.value
    > parent.left.document.write(user_input)
    > }
    > }
    > }


    Presumably you will have a number of these and you want all their values
    added to the 'numb' object? So put the onclick on the form and update
    the object with values from the checked checkboxes. Using an object
    means that the checkbox name can be used as the property name and the
    value as the value, so you'll have to make the names unique (or maybe
    use an id instead).


    > </script>
    >
    > I'm really stuck here, I've tried all kinds of calls, and keep getting the
    > same error (value is null or not a an object)\
    > Any help would be greatly appreciated...


    If this is for a shopping cart, you have a long, long way to go and
    remember do not ever rely on client-side scripting to do anything
    reliable. Check and validate all data on the server as if your script
    did not run (and expect that malicious scripts may have run to change
    whatever values you set).

    I can't see why this needs frames, I wouldn't use them at all.


    Here's something to get you going:

    [ mainpage.html ]

    <form name="cartform" onclick="updateChecks(this);" action="">
    <input type="checkbox" value="500" name="option1">Add 500<br>
    <input type="checkbox" value="600" name="option2">Add 600<br>
    <input type="checkbox" value="700" name="option3">Add 700<br>
    </form>

    <script type="text/javascript">

    window.onload = function(){document.cartform.reset();}

    function updateChecks(f)
    {
    var formEls = f.elements;
    var i = formEls.length;
    var el;
    while (i--){
    el = formEls;
    if ('checkbox' == el.type){
    if (el.checked){
    parent.left.numb[el.name] = el.value;
    } else {
    parent.left.numb[el.name] = 0;
    }
    }
    }
    parent.left.writeSum(parent.left.numb);
    }

    </script>


    [ nav.html ]

    <p>The total is: <br><span id="total">&nbsp;</span></p>
    <script type="text/javascript">

    // Initialise numb
    var numb = [];

    function sumObj(a)
    {
    var x=0;
    for (var prop in a){
    x += +a[prop];
    }
    return x;
    }

    function writeSum(a)
    {
    if (!document.getElementById) return;
    var totalEl = document.getElementById('total');
    if (totalEl){
    totalEl.firstChild.data = sumObj(a);
    }
    }

    </script>


    --
    Rob
    RobG, Dec 12, 2005
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. dave wanta
    Replies:
    0
    Views:
    398
    dave wanta
    Jul 4, 2003
  2. Gibs
    Replies:
    1
    Views:
    1,517
    Steve C. Orr [MVP, MCSD]
    Jan 23, 2004
  3. Powerslave2112

    From Frames to no frames?

    Powerslave2112, Jan 20, 2004, in forum: HTML
    Replies:
    2
    Views:
    568
    brucie
    Jan 20, 2004
  4. Philip
    Replies:
    3
    Views:
    946
    Karl Groves
    Jun 28, 2004
  5. Ale

    Frames or not Frames...

    Ale, Aug 3, 2005, in forum: HTML
    Replies:
    17
    Views:
    938
    Adrienne
    Aug 5, 2005
Loading...

Share This Page