Solved

CF Bind for cascading select boxes - experts only!

Posted on 2010-11-11
3
947 Views
Last Modified: 2012-06-27
Hi Experts,

I'm running CF9 and I figured instead of using an old custom tag to mimic ajax functionality, I wanna use cf bind, which makes life much easier for me (I don't have to deal with all the html nuisance with the old custom tag). On change of the first select box should trigger the bind in the lower two select boxes. The only thing is that I have several cascading select boxes that need to be bound using bind, but they are all in a block that can be refreshed using a check box that uses the old custom tag. Can I have that functionality remain the same but change the select boxes to use bind? Or would that create a conflict because the area in which the cascading select boxes are in a dynamically generated block? If so, could someone give me some leads on how to do the binds?Code is below, thanks in advance!
<!---my select boxes--->
<select name="HRType" id="optype">
  <option value="">All</option>
   <option value="Process">Process</option>
   <option value="Action">Action</option>
</select>

<!---this is the first cascading box that needs to be bound to the one above--->
<select name="ProcessType">
   <option value="">All</option>
  <cfoutput query="GetProcType" group="ProcType">
    <optgroup label="#oType#">
      <cfoutput>
        <option value="#dataid#">#text#</option>
      </cfoutput>
   </cfoutput>
</select>
<!---this select box is also bound to the first select box but with different values--->
<select name="subgroup" id="subgroup">
<option value="">All</option>
<cfoutput query="GetHop" group="aid">
<option value="#aid#">#group#</option>
</cfoutput>
</select>
<!---I know that select has to be changed to cfselect but this is what I have right now. Here is what I have in my cfc - myCFC.cfc --->

<cfcomponent>
  
<cffunction name="myFunc" access="remote" returnformat="plain">
	<cfargument name="ho" required="Yes" default="">
	<cfargument name="site" required="Yes" default="">
	<cfargument name="on" required="Yes" default="">
	<cfargument name="lc" required="Yes" default="">
	<cfargument name="org" required="Yes" default="">
	<cfargument name="ln" required="Yes" default="">
	
	<cfquery name="GetProcType" datasource="#odbc#">
	Select *
	FROM rTable WITH (NOLOCK) 
	where 
	<cfif arguments.ho neq "" or arguments.ho neq "all">
		rtable.id = #arguments.ho# and 
	</cfif>
	rTable.site = #arguments.site#

	</cfquery>
	
	<cfquery name="GetHop" datasource="#odbc#">
		Select * from pTable
		DO = '#arguments.on#'
		
	</cfquery>
	
	<cfset myStruct = StructNew()>
        <cfset myStruct.firstSelectBox = ValueList(GetProcType.name)>
        <cfset myStruct.secondSelectBox = ValueList(GetHop.text)>
          
<cfreturn myStruct>
</cffunction>
</cffunction>

Open in new window

0
Comment
Question by:roger_v
  • 2
3 Comments
 
LVL 4

Accepted Solution

by:
docnica earned 500 total points
ID: 34170728

ok a bind with cfselect looks like this:



<cfselect tabindex="6" name="IDModelo" bind="cfc:datos.getModelo({IDMarca})" class="ui-autocomplete-input ui-widget ui-widget-content ui-corner-all" style="width:200px;" />



datos is the name of the cfc



getModelo is the name of the function



IDMarca, is the ID you pass from the parent select box and must match the name of the selectbox. So in your case, the HRType select box



<select name="ProcessType"  bind="cfc:nameofcfc.myFunc({HRType})">



binded selectboxes are filled by the cfc, so as you see in mine, you do not need to use cfoutput and option tags.



the function would look like this



<!--- obtenemos los modelos de vehiculos --->

   <cffunction name="getModelo" access="remote" returnType="array">

      <cfargument name="IDMarca" type="numeric" required="true">



      <!--- Define variables --->

      <cfset var data="">

      <cfset var result=ArrayNew(2)>

      <cfset var i=0>



      <!--- Get data --->

      <cfquery name="data" datasource="#THIS.dsn#">

      SELECT IDModelo, Modelo

      FROM Modelo

      WHERE IDMarca = #ARGUMENTS.IDMarca#

      ORDER BY Modelo

      </cfquery>

   

      <!--- Convert results to array --->

      <cfloop index="i" from="1" to="#data.RecordCount#">

         <cfset result[i][1]=data.IDModelo[i]>

         <cfset result[i][2]=data.Modelo[i]>

      </cfloop>



you can bind whatever quantity of select boxes to the same parent, so if you need 2 or 3 select boxes to change based on one, just pass the ID

Open in new window

0
 
LVL 4

Expert Comment

by:docnica
ID: 34170730
sorry i posted everithing as code, but for some reason the site gave me errors the normal way
0
 
LVL 1

Author Closing Comment

by:roger_v
ID: 34278645
Although this didn't address my exact issue, it did give me some pointers
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
iPhone looses session info 5 21
CFLogin explained 10 85
Why am I getting a binary result from my query? 5 77
Coldfusion get content of HTML table 8 143
The technique is by far very Simple! How we can export the ColdFusion query results to DOC file?  Well before writing this I researched a lot in Internet but did not found a good Answer anyways!  So i thought now i should share my small snippet w…
Hi, I will be creating today a basic tutorial on how we can create a Mail Custom Function and use it where ever we want. The main advantage about creating a custom function is that we can accommodate a range of arguments to pass to the Function and …
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

932 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now