Dynamic fields conditional upon other dynamic fields' values

Moderator: crythias

Locked
aph
Znuny superhero
Posts: 646
Joined: 20 Jun 2014, 12:11
Znuny Version: 3.3.9, 4.x, 5.x

Dynamic fields conditional upon other dynamic fields' values

Post by aph »

Hi all,

I want to display dynamic fields be based on the values of other dynamic fields. For example, there are three fields on customer new ticket interface Category A, Category B and Category c. The Category A contains value 1 and value 2. The dynamic field Category B should only appear if value 1 was selected for Category A.

I have an existing code to hide/show dynamic fields based on queues viewtopic.php?f=62&t=26090. What I would like to do is to extend the code by adding a switch within a switch. The dynamic fields are hidden by default. Below is my code:

Code: Select all

 function queueFields() {
            $("[id^=DynamicField]").parent().addClass( 'Hidden' );
            $("[id^=LabelDynamicField]").parent().addClass('Hidden');
        }
            $('#Dest').bind('change', function (Event) {
                Core.AJAX.FormUpdate($('#NewCustomerTicket'), 'AJAXUpdate', 'Dest', ['TypeID', 'PriorityID', 'ServiceID', 'SLAID', $Data{"DynamicFieldNamesStrg"}]);
            switch ( $('#Dest').val() ) {
                    case "6\|\|XXX": // need to slash escape the pipes. Also, need to be in numerical order
                        queueFields();
                        $('#DynamicField_CategoryA').parent().removeClass( 'Hidden' );
                        $('#LabelDynamicField_CategoryA').parent().removeClass( 'Hidden' );

                                        $('#DynamicField_CategoryA').bind('change', function (Event) {
                                                   Core.AJAX.FormUpdate($('#NewCustomerTicket'), 'AJAXUpdate', 'DynamicField_CategoryA', ['TypeID', 'PriorityID', 'ServiceID', 'SLAID', $Data{"DynamicFieldNamesStrg"}]);
                                                   switch ( $('#DynamicField_CategoryA').val() )  {
                                                   case "value1":
						
                                                                      $('#DynamicField_CategoryB').parent().removeClass( 'Hidden' );
                                                                      $('#LabelDynamicField_CategoryB').parent().removeClass( 'Hidden' );
                                                                      $('#DynamicField_CategoryC').parent().removeClass( 'Hidden' );
                                                                      $('#LabelDynamicField_CategoryC').parent().removeClass( 'Hidden' );
                                                                      break;
                                                   case "value2":				
                                                                    $('#DynamicField_CategoryC').parent().removeClass( 'Hidden' );
                                                                   $('#LabelDynamicField_CategoryC').parent().removeClass( 'Hidden' );
                                                                   break;
                                                        }
                    break;
                    default:
                        queueFields();

                }
			
            });
        //]]></script>
		
But my code doesn't seem to work. Where am I going wrong? I tried using ACL but the entire dynamic field cannot be hidden, only dynamic field values.
OTRS 3.3.x (private/testing) on Windows Server 2008 with MSSQL database.
OTRS 3.3.x (private/testing) on CentOS with MySQL database and apache
crythias
Moderator
Posts: 10170
Joined: 04 May 2010, 18:38
Znuny Version: 5.0.x
Location: SouthWest Florida, USA
Contact:

Re: Dynamic fields conditional upon other dynamic fields' va

Post by crythias »

you bind to change of Dest. And you expect this to reflect the change of a field that is not Dest.
OTRS 6.0.x (private/testing/public) on Linux with MySQL database.
Please edit your signature to include your OTRS version, Operating System, and database type.
Click Subscribe Topic below to get notifications. Consider amending your topic title to include [SOLVED] if it is so.
Need help? Before you ask
aph
Znuny superhero
Posts: 646
Joined: 20 Jun 2014, 12:11
Znuny Version: 3.3.9, 4.x, 5.x

Re: Dynamic fields conditional upon other dynamic fields' va

Post by aph »

Thanks!. Where I went wrong is that I was trying to bind a change within a change. The improved code as follows:

Code: Select all

function queueFields() {
            $("[id^=DynamicField]").parent().addClass( 'Hidden' );
            $("[id^=LabelDynamicField]").parent().addClass('Hidden');
        }
$('#Dest').bind('change', function (Event) {
Core.AJAX.FormUpdate($('#NewCustomerTicket'), 'AJAXUpdate', 'Dest', ['TypeID', 'PriorityID', 'ServiceID', 'SLAID', $Data{"DynamicFieldNamesStrg"}]);
            switch ( $('#Dest').val() ) {
                    case "6\|\|XXX": // need to slash escape the pipes. Also, need to be in numerical order
                        queueFields();
                        $('#DynamicField_CategoryA').parent().removeClass( 'Hidden' );
                        $('#LabelDynamicField_CategoryA').parent().removeClass( 'Hidden' );						
                    break;
                    default:
                        queueFields();

                }
			
            })
$('#DynamicField_KategorieA').bind('change', function (Event) {
                 Core.AJAX.FormUpdate($('#NewCustomerTicket'), 'AJAXUpdate', 'DynamicField_KategorieA', ['TypeID', 'PriorityID', 'ServiceID', 'SLAID', $Data{"DynamicFieldNamesStrg"}]);
            switch ( $('#DynamicField_KategorieA').val() ) {
                    case "value1":		
                        $('#DynamicField_CategoryB').parent().removeClass( 'Hidden' );
                        $('#LabelDynamicField_CategoryB).parent().removeClass( 'Hidden' );
			               $('#DynamicField_CategoryC').parent().removeClass( 'Hidden' );
                        $('#LabelDynamicField_CategoryC').parent().removeClass( 'Hidden' );		
                    break;
		               case "value2":
			              $('#DynamicField_CategoryC').parent().addClass( 'Hidden' );
                       $('#LabelDynamicField_CategoryC').parent().addClass( 'Hidden' );
                    break;
                    default:
                        queueFields();

                }
			
            })
			
			;
OTRS 3.3.x (private/testing) on Windows Server 2008 with MSSQL database.
OTRS 3.3.x (private/testing) on CentOS with MySQL database and apache
Locked