www.webdeveloper.com
Results 1 to 9 of 9

Thread: Dynamic Form Field Calculation

  1. #1
    Join Date
    Oct 2010
    Location
    UK
    Posts
    11

    Red face Dynamic Form Field Calculation

    Hi,

    I am trying to create some automatic calculations for a dynamic form.

    The complicated bit is that the user can add another row of fields to fill in, which would also need to be calculated.

    Here is what I have so far but it doesn't work!:

    Code:
    var counterx = 0 ;
    function calcu() {
    
    var targetmeh = "meh" + counterx ;
    var quantity = "quantity" + counterx ;
    var costtotal = "costtotal" + counterx ;
    var costours = "costours" + counterx ;
    
    document.getElementById(targetmeh).innerHTML = document.f1.elements.(quantity).value * (document.f1.elements.(costours).value - document.f1.elements.(costtotal).value);
    
    counterx++ ;
    
    	//document.getElementById('meh').innerHTML='test';
    
    //(document.f1.elements.productvalue.value * document.f1.elements.NoOfProducts.value);
    
    }
    Last edited by Kor; 10-06-2010 at 05:10 AM. Reason: wrap the code [code][/code]

  2. #2
    Join Date
    Dec 2003
    Location
    Bucharest, ROMANIA
    Posts
    15,428
    the DOM0 reference uses square brackets:
    Code:
    document.f1[quantity].value
    Before a math add or subtract, make sure both values are numbers, not strings. As the elements values are always strings, you need to perform a previous transformation
    Code:
    document.f1[quantity].value * (Number(document.f1[costours].value) - Number(document.f1[costtotal].value))

  3. #3
    Join Date
    Oct 2010
    Location
    UK
    Posts
    11
    Thanks Kor,

    I have done what you said but it is still not working

    Below I have included the script for adding a new set of form fields

    var counter = <?PHP if($id != NULL) echo $partscount-1; else echo $partscount = 1;?> ;
    function addPart(divName){
    var newdiv = document.createElement('div') ;
    newdiv.setAttribute('id', 'newpartf') ;
    newdiv.innerHTML = "<div id='cbox2'><input type='text' value='1' size='1' name='quantity" + (counter) + "'></div><div id='cbox'><input type='text' size='10' name='manu" + (counter) + "'></div><div id='cbox'><input type='text' size='12' name='part" + (counter) + "'></div><div id='cbox'><input type='text' size='12' name='supplier" + (counter) + "'></div><div id='cbox'><input type='text' size='12' name='type" + (counter) + "'></div><div id='cbox'><input type='text' size='10' name='delivery" + (counter) + "'></div><div id='cbox'><select name='ourcurrency" + (counter) + "'><option vale='pounds'>&pound;</option><option vale='euro'>&euro;</option><option value='dollar'>&#36;</option><option value='yuan'>&yen;</option></select><input type='text' size='2' name='ourcost" + (counter) + "'></div><div id='cbox'><select name='ourcurrency" + (counter) + "'><option vale='pounds'>&pound;</option><option vale='euro'>&euro;</option><option value='dollar'>&#36;</option><option value='yuan'>&yen;</option></select><input type='text' size='2' name='total" + (counter) + "'></div><div id='cbox'><strong><span id='meh" + (counter) + "'>0.00</strong></span></div> \r" ;
    document.getElementById(divName).appendChild(newdiv) ;
    counter++ ;
    }

    var counterx = 0 ;
    function calcu() {

    var targetmeh = "meh" + counterx ;
    var quantity = "quantity" + counterx ;
    var costtotal = "costtotal" + counterx ;
    var costours = "costours" + counterx ;

    document.getElementById[targetmeh].innerHTML = Number(document.f1[quantity].value) * (Number(document.f1.[costours].value) - Number(document.f1[costtotal].value));

    counterx++ ;

  4. #4
    Join Date
    Oct 2010
    Location
    UK
    Posts
    11
    Sorry, the calc code is now:

    function calcu() {

    var targetmeh = "meh" + counter ;
    var quantity = "quantity" + counter ;
    var costtotal = "costtotal" + counter ;
    var costours = "costours" + counter ;

    document.getElementById[targetmeh].innerHTML = Number(document.f1[quantity].value) * (Number(document.f1.[costours].value) - Number(document.f1[costtotal].value));

  5. #5
    Join Date
    Dec 2003
    Location
    Bucharest, ROMANIA
    Posts
    15,428

  6. #6
    Join Date
    Oct 2010
    Location
    UK
    Posts
    11
    Hi,

    Here is the first example of the fields that need to be filled in:

    <div id="cbox2"><input onkeyup="calcu()" type="text" value="1" size="1" name="quantity0"></div><div id="cbox"><input type="text" size="10" name="manu0"></div><div id="cbox"><input type="text" size="12" name="part0"></div><div id="cbox"><input type="text" size="12" name="supplier0"></div><div id="cbox"><input type="text" size="12" name="type0"></div><div id="cbox"><input type="text" size="10" name="delivery0"></div><div id="cbox"><select name="ourcurrency0"><option vale="pounds">&pound;</option><option vale="euro">&euro;</option><option value="dollar">$</option><option value="yuan">&yen;</option></select><input onkeyup="calcu()" type="text" size="2" name="costours0"></div><div id="cbox"><select name="ourcurrency"><option vale="pounds">&pound;</option><option vale="euro">&euro;</option><option value="dollar">$</option><option value="yuan">&yen;</option></select><input onkeyup="calcu()" type="text" size="2" name="costtotal0"></div><div id="cbox"><strong>&#163;<span id="meh0">0.00</strong></span></div>

    As you can see you have ids like "meh0" etc.

    When the user adds a new set of fields, they change to be "costtotal1", "meh1" etc etc.

    Thank you for helping me so far!

  7. #7
    Join Date
    Oct 2010
    Location
    UK
    Posts
    11
    Does anyone know?

  8. #8
    Join Date
    Dec 2003
    Location
    Bucharest, ROMANIA
    Posts
    15,428
    Code:
    document.getElementById(targetmeh)

  9. #9
    Join Date
    Oct 2010
    Location
    UK
    Posts
    11
    It won't work, never-mind.

    Thanks for trying though.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center

"

"

X vBulletin 4.2.2 Debug Information

  • Page Generation 0.14777 seconds
  • Memory Usage 2,938KB
  • Queries Executed 15 (?)
More Information
Template Usage (33):
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_global_above_footer
  • (1)ad_global_below_navbar
  • (1)ad_global_header1
  • (1)ad_global_header2
  • (1)ad_navbar_below
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (1)ad_thread_first_post_content
  • (1)ad_thread_last_post_content
  • (4)bbcode_code
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)headinclude_bottom
  • (9)memberaction_dropdown
  • (1)navbar
  • (4)navbar_link
  • (1)navbar_moderation
  • (1)navbar_noticebit
  • (1)navbar_tabs
  • (2)option
  • (9)postbit
  • (9)postbit_onlinestatus
  • (9)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available (6):
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files (26):
  • ./showthread.php
  • ./global.php
  • ./includes/class_bootstrap.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/functions_navigation.php
  • ./includes/class_friendly_url.php
  • ./includes/class_hook.php
  • ./includes/class_bootstrap_framework.php
  • ./vb/vb.php
  • ./vb/phrase.php
  • ./includes/functions_facebook.php
  • ./includes/functions_calendar.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_notice.php
  • ./packages/vbattach/attach.php
  • ./vb/types.php
  • ./vb/cache.php
  • ./vb/cache/db.php
  • ./vb/cache/observer/db.php
  • ./vb/cache/observer.php 

Hooks Called (73):
  • init_startup
  • friendlyurl_resolve_class
  • init_startup_session_setup_start
  • database_pre_fetch_array
  • database_post_fetch_array
  • init_startup_session_setup_complete
  • global_bootstrap_init_start
  • global_bootstrap_init_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • load_show_variables
  • load_forum_show_variables
  • global_state_check
  • global_bootstrap_complete
  • global_start
  • style_fetch
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • strip_bbcode
  • friendlyurl_clean_fragment
  • friendlyurl_geturl
  • forumjump
  • cache_templates
  • cache_templates_process
  • template_register_var
  • template_render_output
  • fetch_template_start
  • fetch_template_complete
  • parse_templates
  • fetch_musername
  • notices_check_start
  • notices_noticebit
  • process_templates_complete
  • friendlyurl_redirect_canonical
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • memberaction_dropdown
  • tag_fetchbit
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • build_navigation_data
  • build_navigation_array
  • check_navigation_permission
  • process_navigation_links_start
  • process_navigation_links_complete
  • set_navigation_menu_element
  • build_navigation_menudata
  • build_navigation_listdata
  • build_navigation_list
  • set_navigation_tab_main
  • set_navigation_tab_fallback
  • navigation_tab_complete
  • fb_like_button
  • showthread_complete
  • page_templates