Jquery :: Realtime Order Form - Change Form Elements Depending On Selection
Aug 25, 2010
I've been struggling trying to get a small order form to work the way I want it to. Here is a link to the live page: [URL] And here is the code in question:
[Code]...
I have two questions...
Question 1 How can I make this piece of script act a little smarter. Look at the order form, I'm catering for up to 4 people and providing lunch for them. If they select 3 people and the spaghetti bol for lunch, it's only adding $10 where it should be adding $30. Obviously this is simple multiplication but since the values in my form are prices it makes it a little tricky. I'm guessing an onselect on the first part of the form which changes the pricing of the other items would be the way to go, but how do I do this?
Question 2 The "Total Price" is placed before the <form> tag by the script. This is ok but it's not where I want it. How can I position this text elsewhere in the document?
I have a big form which I'm tidying up by only showing elements when they become relevant, based on the currently selected input (eg to only show an option for 'waist size' when garment type 'jeans' has been selected). I've done this many times, and probably used a different approach each time, so I just wanted to see what other people do. It's currently along these lines: "If a particular option is selected, then show this element, otherwise hide it".
Code: //the onclick handler function checkViewType() { //go through radio inputs in the cell and check what's clicked document.getElementById('supplierOptions').style.display=radioCollection.supp.checked?"":"none"; document.getElementById('subCatOptions').style.display=radioCollection.subcat.checked?"":"none"; document.getElementById('subCatTimeOptions').style.display=radioCollection.subcat_sumtype_time.checked?"":"none"; document.getElementById('subCatSumOptions').style.display=radioCollection.subcat_sumtype_sum.checked?"":"none"; document.getElementById('subcat_weekmonth_span').innerHTML=radioCollection.subcat_time_week.checked?"week":"month"; }
But it's a big form, with lots of nested options, and some elements can be triggered visible by several different options. So I'm looking for an elegant way to handle this without a million if..elses. Perhaps an array of element ids and which elements are allowed visible when that's selected.
<p>Put in list?</p> <select name="in_list"> <option value="yes">Yes</option> <option value="no">No</option> </select>
Some PHP code governs whether the "yes" or the "no" option in either menu gets the 'default' "selected="selected" showing, based on database information. For instance, in the first menu, if the page deals with a case where the the first "is_current" value is indeed current, then the PHP code will write the default "selected="selected" for "yes":
HTML Code: <select name="is_current"> <option value=yes" selected="selected">Yes</option> <option value=no">No</option> </select>
If the page deals with a case where the value isn't current, the selected="selected" code will be written for the "no" value instead. The same goes for the second select menu. Now, the logic of my situation requires that, if the user selects "Yes" in the first "is_current" drop-down, then only "Yes" should be available to select in the second "in_list" menu. Anyway, I don't know javascript very well, but I found a function that seemed to be able to do this.
Code: <script type="text/javascript"> (function () { function updateLevel() { var limit = Number(this.value); // find the next select element var selects = this.form.getElementsByTagName('select'); var select; for (var i = 0; i < selects.length; i++) { if (selects[i] === this && selects[i+1]) { select = selects[i+1]; break; .....
(Apparently the script has to be put or called just before the </body> tag at the end of the page.) Then the select menus are recast as:
<p>Put in list?</p> <select name="in_list"> <option value="1">Yes</option> <option value="2">No</option> </select>
Now this appears to work, up to a point. If the user selects "Yes" for the first "is_current" selection, then only "Yes" becomes available for selection in the second "in_list" menu. A posted value of "1" represents "yes", and a value of "2" represents "no". Except, in Firefox, the javascript somehow overrules the default selected="selected" code. That is, the source code in the browser is correct, but the javascript draws it incorrectly.
For instance, say the database/PHP has drawn selected="selected" for the value "yes" in the second menu. Even though I can see that the source code is OK in the browser, the javascript will make the browser show a "No" selection as the initial default. This happens in Firefox, though not in Safari, and I haven't tested other browsers yet. This may be obvious but I'm not sure of javascript.
Do you know why js does not reset this multi select box? <select name="LOB" multiple="multiple" size="5" style="background:#fff3b3;width:150px" > <option value="DP" >DP</option> <option value="DTV" >DTV</option> <option value="HSD" >HSD</option> <option value="PPV" >PPV</option> <option value="RF" >RF</option> <option value="VOD" >VOD</option> </select>
Code: function clearForm(oForm) { var elements = oForm.elements; oForm.reset(); for(i=0; i<elements.length; i++) { field_type = elements[i].type.toLowerCase(); switch(field_type) { case "text": case "password": case "textarea": case "hidden":
elements[i].value = ""; break; case "radio": case "checkbox": if (elements[i].checked) { elements[i].checked = false; } break;
case "select-one": case "select-multi": //alert(elements[i].value); elements[i].selectedIndex = -1; break; default: break; }}}
I am setting up a contact form, and want to have a drop down box with a handful of options. Clicking one option should display fields to input username & password, whereas all others will not. So far, I've tried and (replacing 'none with 'block' for the option that is supposed to show the input fields) but neither does what I need it to. I'm fairly new to javascript, just muddling my way through with the aid of tutorials.
The code below lets a user select a drop down option and a picture changes depending on the selection. I am trying to make it so when you select an option on the dropdown the picture shows up in the center of the screen and in the background behind the text. Here is the code.
<html> <head> <style type='text/css'> #txt {background-repeat:no-repeat;width:200px;height:200px;} </style> <script type='text/javascript'> function div_bg(team){ document.getElementById('txt').style.backgroundImage="url(images/" + team + ".jpg)"; }
I'm trying to write a progressively enhanced web application. I have an index page and a form with some select boxes and some radio buttons on a different php page. Before enhancement occurs, the form is accessible via regular links and everything works as expected. No issues.
In the enhanced version of the application, the form is AJAXed into the index page. When this occurs, the select boxes in the form work perfectly. The radio buttons are initially unchecked and I can check one option as usual. However, once one is checked, clicking the other radio options does nothing. I am unable to check a different option.
Anybody got a clue what the problem is?
Using Chrome by the way. Firefox is the same as Chrome. In IE I can't even check a radio button the first time.
Here's the code that's ajaxed in:
<label>First Time Buyer Status <!--These values can't be 1/0 because 0 stands for not set--> <input type="radio" name="FTB" id="FTBYes" value="1" <?php $M->checkFTBValue(1); ?> title=""/>First Time Buyer
[Code].....
The PHP script you see there checks if the value on the server matches the value of the radio button and echo's checked="checked" if true. I thought this could be causing the problem initially but the exact same code is used in the non-enhanced version and it works fine. I tried commenting it out anyway but it makes no difference.
The only thing I can think of is that some javascript is preventing me from selecting a different radio option. That would explain why it works ok in the non-enhanced version because there is no JS there. I can't find anything that I've written that might cause this effect I'm using jQuerys form plugin on my pages. I'm going to try writing it out and see if that fixes anything.
In the mean time, is there a way I can check if any JS functions when I click on the radio button?
Sorry if this is in the wrong forum, there's so many different languages involved, I hadn't a clue where to put it.
I'm attempting to physically change the index order of the elements returned by a selector.For example, I'm attempting to make it so when someone clicks on a button, it swaps the index position of the element above or below it (depending on which button they press).I tried to assign it using something like $('.draggable :eq(2)').attr('index', 3)But it didn't seem to work. Is there a way to do it using jQuery, or do I have to change it within DOM itself? Or is there another way to do it?
I have this order form where the customers can change the quantity by intput in a text field.I would like to have the text field changed with select fields, but doing so in the form, the script is not doing anymore.Can anyone have a look and tell me what to change in the scritp to accept select fields in place of the text fields.
How does one cause a form element to appear ONLY if a certain form selection is made before it?
That is for example say there is a form element of type Radio called "format" so only if they select format value = normal then the form input fields called URL and Name are to appear as the next choices otherwise form input field Group and checklist Places are to appear as the next choices.
I have a grid that I'm adding rows to that include form text input boxes using addRowData. I know I can use the "editable:true" for that but I'd rather not at this time. Anyway I have the <div id=list1></div> surrounded by a <form></form>. Also statically I have a couple of text input boxes and a submit button. When I press the submit button the only parameters that show up in the POSTED data are the static ones. Is there a way to get the form elements "registered" with the form? I know I can always use javascript to extract the data and save it via an ajax call, but if there is a way to do it "correctly"
Example var myRow = {id:"0",call:"<input name='callt"+boxNo+"' id='call"+boxNo+"' class='calls' type='text'/>",amount:"<input name='amt"+boxNo+"' id='amt"+boxNo+"' type='text' value='"+defaultDep+"'/>",residual:"",calculate:"<input type='button' class='buttons' id='b"+boxNo+"'/>"}; $("#list1").addRowData(boxNo,myRow);
I'm using the jquery plugin found here. I love the look but I have a form that uses functions like this:
[Code]..
So, when you select a country and it retrieves the state/province text input, the jquery css is not applied to it. Is there something I need to add to the code above or to the jquery initialization code here:
What I want to do is: disable the submit button while not all form fields are filled out and eneble it when the form fields are filled out. Disabling works, the enabling doesn't, at least not 'automaticly'. All of the code is in the $(document).ready(function(){}
I have this code: checkAll(); function checkAll() {
I am writing an accounting sofware, and I have difficulties with the form used to enter the debit and credit for a given transaction. I have used the Jquery validation plugin demo, but I don't know how to hide a specific input cell and replace it by blanks. In accounting, you have either a credit or a debit. So I have an indicator tick box at the beginning of each line which defines whether the line is a debit or credit, and if so it hides the credit cell or debit cell.
Well that works, but i want to add a select option <option>bar1</option> option>bar2</option>
And depending what option is selected, i want to load that get instead. So if bar2 is selected, the load should (asyncronosly) load test.php?foo=bar2 instead.
I'm handling a form submission event. Is there a way to modifiy the value of a text input within the form before the form is finally submitted? I tried setting the value using, 'val()' - it updated the text field but the value sent with the POST was the original value
I have a form with a series of fields. Only certain fields need to be validated when certain buttons are pressed. The reason for this is mainly because I had to build my own wizard style setup with jquery so, even though it's one big form, only certain bits need to be checked as they progress. I tried to tweak the accordion example given by the creators but it can't really apply to my scenario.
I've simplified the code down a bit and it is behaving exactly the same way as the big form...which is to say it's not behaving at all.
In this code, I want it to only validate field txt1 if button 1 is pressed and text2 if field 2 is pressed. One odd thing to note, when I set it up exactly as the site recommended with one big mass validation and such, it would only acknowledge the existence of the first field even though they both had class="required" on them.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head >
I need to pass user input from a form to one database field. I'm relatively new to JS but the idea I had was to have several form elements and use JS to collect the users input and send all the values through a hidden element. What's happening is the variable names are being sent rather than the values. The code below is only passing to the next page. Limitations: I am editing an intranet site built by a 3rd party so a lot of the files we've been given are encrypted. I cannot change the method to post.
I've put together what I think is an illustration of my problem at [URL] Quite simply, I need to be able to access the elements of the form without referring to them by ID as the whole form is intended to be cloned. I intended to do this using parentNode and childNodes[] together with the 'this' keyword. My understanding of 'this' in this context is that it should refer to the HTML element calling the function, i.e. one of the radio button inputs. However this gives the error "Error: this.parentNode is undefined"
Does "document.formName.elementName.disable" work on hidden form text elements? I have a form with some input fields that are associated with some hidden text fields and I would like to disable all of the categories inside the form when the page loads and only enable each category as it is needed. Code:
I'm working with a form that has both static and dynamic form elements (add textbox, etc), and while I can access the static elements via request.form, the dynamic elements cannot be accessed. I have the dynamic elements appended within a div that lies within a table.
Here is the javascript:
Code:
function add3<%=strGoalCount%><%=strObjCount%>() { var foo = document.getElementById('fooBar<%=strGoalCount%><%=strObjCount%>'); var numi = document.getElementById('theValue'); var num = (document.getElementById('theValue').value -1)+ 2;
I would like to submit a form depending on the success data of an ajax post.
Below is my jquery code; as you see #theform is the main form and before submitting the form I need to check the availability of the the date and time and the room using$.ajax. However it doesn't submit the main form if the date, time and the room is available.
required=["txtCal_Event_CalendarID","txt_TreatmentRoom","txtTreatmentID","txtTreatmentTypeID","datepicker1","datepicker2","timepicker1","timepicker2"]; emptyerror="Please fill out this field.";