Results 1 to 13 of 13

Thread: onchange() event

  1. #1

    Thread Starter
    Addicted Member
    Join Date
    Feb 1999
    Location
    Belfast
    Posts
    254
    Hi,
    I posted a question regarding onchange() event recently (rhanks to Mark Sreeves ). Basically I wanted to return the value that was clicked on in a list box, and use this as a paramter for the populating another list box.

    However I think in order to manipulate the list choice involves writing a javascript function ( which I am not keen on ). I want the value selected assigned to a variable, which can then be used as a parameter for returning records.

    Can this be done?


    All the sites I have looked at required writing a javascript function. Is this necessary?

    Thanks in advance.

    Lenin

  2. #2
    Frenzied Member Mark Sreeves's Avatar
    Join Date
    Nov 1999
    Location
    UK
    Posts
    1,845
    I think you'll have to write some javascript.

    So is this what you want to do?

    include the selected item in an SQL select
    and then populate a second list from the record set.

    How much data is required for the second list?



    [Edited by Mark Sreeves on 07-06-2000 at 08:15 AM]
    Mark
    -------------------

  3. #3

    Thread Starter
    Addicted Member
    Join Date
    Feb 1999
    Location
    Belfast
    Posts
    254
    Thanks ( again ) for the reply Mark.

    Yes, JScript will be fine.

    The datasets are very small, between 10 - 30 records. I was going to use SQL to return all records ( via a join ) to the client and populate the second combo as required.

    Can you give me some pointers on the JScript, I have never used it.

    Thanks.

    Lenin.

  4. #4
    Addicted Member
    Join Date
    May 2000
    Posts
    142
    i am doing something similar....

    i'm assuming you must have a form on your page...?
    if so, then what I would suggest is that when onchange event fires, simulate a click of the submit button, which will submit the page to itself. then you can refresh your SQL statement based on their selection and populate another form item with the results.

    i have the simulating submit click working in IE, but not in Netscape. see my thread on this topic for the simple javascript (and fix it if you can!)

    dvst8
    Secret to long life:
    Keep breathing as long as possible.

  5. #5

    Thread Starter
    Addicted Member
    Join Date
    Feb 1999
    Location
    Belfast
    Posts
    254
    dv8,
    what was the thread subject?

  6. #6
    Addicted Member
    Join Date
    May 2000
    Posts
    142
    its 3-4 threads down... the only one started by me

    doesnt work in Netscape

    /d8
    Secret to long life:
    Keep breathing as long as possible.

  7. #7
    Frenzied Member Mark Sreeves's Avatar
    Join Date
    Nov 1999
    Location
    UK
    Posts
    1,845
    The way I see it, you've got 2 options

    1) either load all the data into a [client-side]javascript array and then populate the list from that.

    or

    2) post the selected item back to the server and re write the page.

    option 1 would be the fastest
    option 2 would be more 'secure' as only required data is written back to the client and more complex sql can be run.


    If you can give me some indication the data for list one and list 2 I'll knock-up some code for you


    Mark
    -------------------

  8. #8

    Thread Starter
    Addicted Member
    Join Date
    Feb 1999
    Location
    Belfast
    Posts
    254
    Mark,
    option 2 is probably closer to my requirements. It seems from an initial look, JScript has a few advantages og VBScript ( paramterised functions etc. ).

    Thanks for the continued help.

    Lenin

  9. #9

    Thread Starter
    Addicted Member
    Join Date
    Feb 1999
    Location
    Belfast
    Posts
    254
    Hi again MArk: Think I have a version that works now.

    Tried this:


    <SCRIPT Language="JavaScript">
    <!--
    function BuildList(num)
    {
    thehref = num.options[num.selectedIndex].value;
    alert(thehref)
    }
    //-->/

    from the onchange event and it returns the the value clicked on. however I want to pass this value ( variable ) to another call to the database. Is this possible from within the Jscript function? Can I persist the value in a session variable?

  10. #10
    Frenzied Member Mark Sreeves's Avatar
    Join Date
    Nov 1999
    Location
    UK
    Posts
    1,845

    This is version of type 1

    I'll answer your last Question seperately

    database has two tables

    table1 and table2

    Code:
    table1:
    id	list1
    1	boys names
    2	girls names
    
    table2:
    id	list2
    1	Bert
    1	fred
    1	Joe
    1	Mark
    1	Tim
    2	Betty
    2	Dot
    2	Mary
    2	Sally
    and the script:
    Code:
    <%@ Language=VBScript %>
    <BODY BACKGROUND="rfbg.gif" BGCOLOR="#ffffff">
    <HEAD>
    <!--
    Written by Mark Sreeves
    -->
    <%
    'now load all the data for list 2 from table2 into the client side javascript array
    	dim conn
    	dim rst
    
    	Set Conn = Server.CreateObject("ADODB.Connection")
    	
    	strSQL = "SELECT * FROM table2;"
    
    	Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=C:\lenin.mdb")
    
    	Set rst = Conn.Execute(strSQL)
    	
    	Response.Write("<script Language='JavaScript'>" & vbcrlf)
    	Response.Write("var DetailArray = new Array();")
    	i = 0
    	do while not rst.EOF
    	%>	
    	DetailArray[<%=i%>]= new Array("<%=rst("id")%>","<%=rst("List2")%>");
    	
    	<%
    		rst.MoveNext
    		i = i + 1
    	loop
    	rst.Close
    Response.Write("</script>")
    	%>
    <script Language="JavaScript">	
    var i;
    function fillList2(id){	
    var j;
    j = 1;
    	for(var i=0; i < DetailArray.length; i++)
    	{
    		if (DetailArray[i][0] == id)
    		{
    			document.frm1.select2.options[j].value =j;
    			document.frm1.select2.options[j].text = DetailArray[i][1];
    			j++;
    		};
    	}
    }
    
    </script>
    
    
    <form name="frm1">
    <SELECT name=select1 onchange="fillList2(select1.options[select1.selectedIndex].value)">
    
    <%
    strSQL = "SELECT * FROM table1;"
    Set rst = Conn.Execute(strSQL)
    	do while not rst.EOF
    		'fill the combo box
    %>
    		<OPTION value="<%=rst("id")%>"><%=rst("list1")%>
    	<%rst.MoveNext
    	
    	loop
    	
    	rst.close
    	
    	conn.Close
    	set conn = nothing
    	set rst = nothing
    	
    	%>
    
           
    </SELECT>     
    <BR>
    <SELECT name=select2>
    
    <% 'load dummy options
    
    for i = 0 to 10
    	Response.Write "<OPTION value='xx'>"
    next
    
    %>       
    </SELECT>      
    </form>   
    </BODY>
    </HTML>
    Mark
    -------------------

  11. #11

    Thread Starter
    Addicted Member
    Join Date
    Feb 1999
    Location
    Belfast
    Posts
    254
    Many thnaks Mark, I'll try it tonight.

    Lenin

  12. #12
    Frenzied Member Mark Sreeves's Avatar
    Join Date
    Nov 1999
    Location
    UK
    Posts
    1,845
    lenin, the code I posted was 2 scripts cobbled together.

    I was rather busy on Friday so I thought I would post it to keep you going anyway!

    I'll clean it up, comment it properly and repost it.

    Also the line that says

    if (DetailArray[0] == id)

    should be

    if (DetailArray[ i ][0] == id)

    but without spaces. In the original posting it was interpreted as the italic tag.

    I'll have to stop using i as a loop counter!



    Mark
    -------------------

  13. #13

    Thread Starter
    Addicted Member
    Join Date
    Feb 1999
    Location
    Belfast
    Posts
    254
    Mark,
    got this working ( eventually ). Many thanks for all the input.

    Lenin.

Posting Permissions

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



Click Here to Expand Forum to Full Width