Hello and welcome to our community! Is this your first visit?
Register
Enjoy an ad free experience by logging in. Not a member yet? Register.
Results 1 to 3 of 3
  1. #1
    New to the CF scene
    Join Date
    Feb 2013
    Posts
    1
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Validate dynamically populated select menu

    After the user selects a country, it populates and displays a select menu with the states from the populate.php page. After the new populated select menu is displayed i want to check to make sure the user has made a selection before submitting the form. Currently i am only changing the background colour but i cant get the message to display, nor can i stop it from submitting before the information is correct. Any help would b appreciated. Thank you.

    Here is my code:
    Validate.php page
    Code:
    <!doctype html>
    <html lang="en">
    <head>
    <meta charset="utf-8">
    <script type="text/javascript">
    		//function to populate menu
    	jQuery(document).ready(function(){				
    		// when any option from country list is selected
    		jQuery("select[name='country']").change(function(){	
    
    			// get the selected option value of country
    			var optionValue = jQuery("select[name='country']").val();		
    			jQuery("#cityAjax")
    				.html(ajaxLoader)
    				.load('populate.php', {country: optionValue, status: 1}, function(response){					
    					if(response) {
    						jQuery("#cityAjax").css('display', '');
    					} else {
    						jQuery("#cityAjax").css('display', 'none');
    					}
    			});			
    		});
    	});
    
    		        // Validate Select boxes
            function validateSelect(x){
                if(document.getElementById(x).selectedIndex !== 0){
                    document.getElementById(x).style.background ='#ccffcc';
                    document.getElementById(x + 'Error').style.display = "none";
                    return true;
                }else{
                     document.getElementById(x).style.background ='#e35152';
    				 document.getElementById(x + 'Error').style.display = "block";
                    return false;   
                }
            }
    
    	
    				function validateForm(){
     			// Set error catcher
    			var error = 0;
    			 // Validate city dropdown box
                if(!validateSelect('city')){
                    document.getElementById('cityError').style.display = "block";
                    error++;
                }
    			// Don't submit form if there are errors
    			if(error > 0){
        		return false;
    			}
    		}
    </script>	
    
    </head>
    <body>
            <div id="cityAjax"  style="display:none">
              <div class="slAdd1a">Parish:</div>
              <div class="slAdd1b">
                <label for="city"></label>
               <select name="city" id="city" onblur="validateSelect(name)">
                <option value="">--Select a State--</option>
                </select>
                <span class="validateError" id="animalError" style="display: none;">You must select a state</span>
              </div></div>
            <div class="slAdd1">
              <div class="slAdd1a">Country:</div>
              <div class="slAdd1b"><span id="sprycountry">
                <label for="country"></label>
                <select name="country" id="country">
                  <option value="" selected="selected">Please Select</option>
                  <option value="Russia">Russia</option>
                  <option value="England">England</option>
                </select>
                <span class="selectInvalidMsg">Please select a valid item.</span><span class="selectRequiredMsg">Please select an item.</span></span></div>
                </div>
    </body>
    </html>
    And the second page
    populate.php page
    Code:
    <?php
    $country = $_POST['country'];
    
    if(!$country) {
    	return false;
    }
    
    $cities = array(
    			"Russia" => array('Russian State'),
    			"England" => array('English State'),
                       );
    $currentCities = $cities[$country];
    ?>
    
    <div id="cityAjax">
              <div class="slAdd1a">Parish:</div>
      <div class="slAdd1b">
              <label for="city"></label>
              <select name="city" id="city" onblur="validateSelect(name)">
                <option value="">--Select a State--</option>
                <?php
    			foreach($currentCities as $city) {
    			?>
                <option value="<?php echo $city; ?>"><?php echo $city; ?></option>
                <?php 
    			}
    				?>
              </select>
              <span class="validateError" id="cityError" style="display: none;">You must select State</span></div></div>

  • #2
    Senior Coder rnd me's Avatar
    Join Date
    Jun 2007
    Location
    Urbana
    Posts
    4,444
    Thanks
    11
    Thanked 598 Times in 578 Posts
    in newer browsers and mobile, you can simply add the word " required " to your <select> tag to prevent empty submitting.
    my site (updated 2014/10/20)
    BROWSER STATS [% share] (2014/9/03) IE7:0.1, IE8:4.3, IE11:9.2, IE9:2.7, IE10:2.6, FF:16.8, CH:47.5, SF:7.8, NON-MOUSE:37%

  • #3
    Supreme Master coder! Philip M's Avatar
    Join Date
    Jun 2002
    Location
    London, England
    Posts
    18,240
    Thanks
    203
    Thanked 2,554 Times in 2,532 Posts
    Code:
    function validateSelect(x){
    if (document.getElementById(x).selectedIndex == 0) {
    alert ("You must make a selection"):
    return false;
    }

    Quizmaster: In the Bible, Noah's three sons are called Japheth, Shem and ... what? Ham, Lamb or Spam?
    Contestant: Lamb.
    Quizmaster: The correct answer is Ham.
    Contestant: Who'd call their son Ham?

    All the code given in this post has been tested and is intended to address the question asked.
    Unless stated otherwise it is not just a demonstration.


  •  

    Posting Permissions

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