Geekzone: technology news, blogs, forums
Guest
Welcome Guest.
You haven't logged in yet. If you don't have an account you can register now.


Jeeves

301 posts

Ultimate Geek


#193455 11-Mar-2016 16:31
Send private message

So I have an ajax script for cascading drop down forms.

 

At the moment it's called when the "master" drop down is changed or focused, using the jquery on() function. When the user selects an item from the master dropdown, the ajax script is called to load a php script that checks the sql DB for all the "children" of that master, which then populates the child drop down list.

 

 

 

$("select#master").on("change focus", function(){
var master = $("select#master option:selected").attr('value');
if (master.length > 0 ){

$.post("inc/fetchChild.php",
{
id: master
},
function(data){
$("#child").html( data );
});

};
});

 

 

 

This works all well and good - no dramas. 

 

The problem is I want this script to fire on page load. This is because the form data at the next page is saved as session variables, so the user can go back and forth between the form stages and each form element checks to see if there is a associated session variable, and if there is, loads it up. 

 

Im doing this because the form is very long and broken into 5 sections - so I dont want the customer losing their form data if they go back and forth.

 

 

 

So, I need this above script to fire on page load because if the user has already selected the child and master previous - then php loads the "master" drop down with the user selection already loaded and selected. This once the page has finished loading, the ajax script needs to fire - sees that the master is already loaded, and subsequently loads the children for that master.

 

 

 

So going back to the main problem. If I insert "ready" into the ".on("change focus", function()" function ..... .on("change focus ready", ... it doesn't work.

 

 

 

However If I copy and past the above functions contents into the root $(document).ready(function(){ function, it works fine! Like this:

 

 

 

$(document).ready(function(){


var master = $("select#master option:selected").attr('value');
if (master.length > 0 ){

$.post("inc/fetchChild.php",
{
id: master
},
function(data){
$("#child").html( data );
});

};


$("select#master").on("change focus", function(){
var master = $("select#master option:selected").attr('value');
if (master.length > 0 ){

..........................etc...

 

 

 

 

 

Problem is now I have pretty much a duplicate function, which isn't very efficient and a but ugly.

 

I hope I'm explaining myself clear enough...

 

Can I reconfigure this on function to fire on page load as well as when the user clicks on the master list?

 

 

 

 

 

 


Filter this topic showing only the reply marked as answer Create new topic
geocom
587 posts

Ultimate Geek

Subscriber

  #1511472 11-Mar-2016 16:37
Send private message

You would put everything in the function into its own function

 

So like follows

 

function reload_list(){

 

var master = $("select#master option:selected").attr('value');
if (master.length > 0 ){

$.post("inc/fetchChild.php",
{
id: master
},
function(data){
$("#child").html( data );
});

 

}

 

$("select#master").on("change focus", function(){

 

reload_list();

 

});

 

$(document).ready(function(){

 

reload_list();

 

});





Geoff E


 
 
 

Shop Mighty Ape for electronics, games, computers books and more (affiliate link).
Jeeves

301 posts

Ultimate Geek


  #1512714 14-Mar-2016 08:48
Send private message

ahh of course. cheers!


Filter this topic showing only the reply marked as answer Create new topic





News and reviews »

HP Unveils Broadest Consumer Portfolio of AI-Enhanced Laptops
Posted 3-Mar-2024 18:09


Samsung Tab S9 FE Review
Posted 3-Mar-2024 18:00


Norton Genie Review
Posted 3-Mar-2024 17:57


Synology Introduces BeeStation
Posted 23-Feb-2024 14:14


New One UI 6.1 Update Brings Galaxy AI to More Galaxy Devices
Posted 23-Feb-2024 10:50


Amazon Echo Hub Available in New Zealand
Posted 23-Feb-2024 10:40


InternetNZ Releases Internet Insights 2023
Posted 20-Feb-2024 10:31


Seagate Adds 24TB IronWolf Pro Hard Drives for Multi-user Commercial and Enterprise RAID Storage Solutions
Posted 19-Feb-2024 16:54


Seagate Skyhawk AI 24TB Elevates Edge Security Capacity and Performance
Posted 9-Feb-2024 17:18


GoPro Releases Quik Desktop App for macOS and Introduces Premium+ Subscription Tier
Posted 9-Feb-2024 17:14


Ring Introduces New Ring Battery Video Doorbell Pro
Posted 9-Feb-2024 16:51


Galaxy AI Transforms the new Galaxy S24 Series
Posted 18-Jan-2024 07:00


D-Link launches AI-Powered Aquila Pro M30 Wi-Fi 6 Mesh Systems
Posted 17-Jan-2024 20:02


Newest LG 4K Lifestyle Projector Doubles as Art Objet
Posted 9-Jan-2024 15:50


More LG Smart TV Owners Set To Enjoy the Latest webOS Upgrade
Posted 9-Jan-2024 15:45









Geekzone Live »

Try automatic live updates from Geekzone directly in your browser, without refreshing the page, with Geekzone Live now.



Are you subscribed to our RSS feed? You can download the latest headlines and summaries from our stories directly to your computer or smartphone by using a feed reader.