Quantcast
Channel: Active questions tagged javascript - Stack Overflow
Viewing all articles
Browse latest Browse all 140788

Is there a way by which I can populate an additional field just below the 'Protocol Type' based on the input i select from the drop down

$
0
0

while designing the following application I am facing an issue. I am trying to generate an additional field 'Product Detail' just below the Protocol Type (which is only active when i select 'RAID' in controller type). It can be a part of the 'Additional Details' or it can be just on top of it. Attaching the working code below, any help would be much appreciated. Thanks for your time

document.addEventListener('DOMContentLoaded',function(){
				const extra={};
				const oForm=document.forms.myForm;
				const oSave=document.querySelector('input[name="save"]');
				const oSub=document.querySelector('input[name="submit"]');
				const oCtrl=document.querySelector('select[name="controller"]');
				const oTest=document.querySelector('select[name="test"]');
				const oProto=document.querySelector('select[name="protocol"]');
				const oTmp=document.querySelector('template');

				const changehandler=function(e){
					let option=this.options[ this.options.selectedIndex ];
					
					if( option.hasAttribute( 'data-extra' ) ) extra[ this.name ]=this.value;
					else{
						if( extra.hasOwnProperty( this.name ) )delete extra[ this.name ];
					}
					if( Object.keys( extra ).length==2 ){
						let fieldset=oTmp.content.cloneNode( true );
						oForm.insertBefore( fieldset, oProto.parentNode.nextSibling )
					} else {
						if( document.getElementById('extra') ){
							fieldset=document.getElementById('extra')
							fieldset.parentNode.removeChild( fieldset );
						}
					}

					if( option.hasAttribute( 'data-extra' ) ) extra[ this.name ]=this.value;
					else{
						if( extra.hasOwnProperty( this.name ) )delete extra[ this.name ];
					}


					if( this.name=='controller' ){
						if( this.value=='RAID' )oProto.disabled=false
						else oProto.disabled=true
					}
				}
				const dialog=function( msg ){
					alert( msg );
					return false;
				}
				const savehandler=function(e){
					e.preventDefault();
					let valid=true;
					/*[ 'name','email','test','controller','ip','chassis' ].forEach( n => {
						oForm[ n ].classList.remove('invalid');
						if( oForm[ n ].value=='' ){
							oForm[ n ].classList.add('invalid');
							valid=false; 
						}
					});*/
					if( !valid ) return dialog('Please fill all the fields!');
					const ipformat = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
					if ( ipformat.test( oForm.ip.value ) == false ) {
						return dialog('Invalid IP Address');
					}					

					let data={
						'Test type':oForm.test.value,'IP Address':oForm.ip.value,'Product Type':oForm.controller.value,'Protocol Type':oForm.protocol.value,						'Chasis Inputs':oForm.chassis.value
					};

					

					if( Object.keys( extra ).length==2 ){
						data['HBA_Ports']=oForm['hba-ports'].value;
						data['MC_IP']=oForm['extra-ip'].value;
						data['MC_Netmask']=oForm['netmask-ip'].value;
						data['MC_Gateway']=oForm['gateway-ip'].value;
						data['MC']=oForm['rbod-mc'].value;
						data['SC']=oForm['rbod-sc'].value;
						data['FU']=oForm['rbod-fu'].value;
						data['EC']=oForm['rbod-ec'].value;
						data['Controller_ID']=oForm['Controller-ID'].value;
					}


					let payload=Object.keys( data ).map( key=>{
						return [ key, data[ key ] ].join(': ')
					}).join( String.fromCharCode( 10 ) );
					const blob = new Blob( [ payload ], { type: 'text/plain' });
					const file = 'formData.yaml';
					let link = document.createElement('a');
						link.download = file;
					if( window.webkitURL != null ) {
						link.href = window.webkitURL.createObjectURL(blob);
					} else {
						link.href = window.URL.createObjectURL(blob);
						link.style.display = "none";
						document.body.appendChild(link);
					}
					link.click();
				}

				oCtrl.addEventListener('change',changehandler);
				oTest.addEventListener('change',changehandler);
				oSave.addEventListener('click',savehandler);

			})
<!DOCTYPE html><html><head><title>Save form Data in a Text File using JavaScript</title><h1>User Information </h1><style>
			html, html * {
				box-sizing:border-box;
				border-color: teal;
				font-family:calibri;
			}
			html{
				  background : radial-gradient(rgba(48, 97, 97, 0.5),rgba(255,255,255,0.5))
			}

			input[type=button],
			input[type=submit]{ 
				padding:1rem;
			}


			input[type=text],
			textarea,
			select {
				font: 17px Calibri;
				width: 100%;
				padding: 12px;
				border: 1px solid rgb(19, 18, 18);
				border-radius: 4px;
				color:teal
			}
			fieldset{
				border:none;
				padding: 10px;
				overflow: hidden;
				color: rgb(16, 8, 32);
				font-size: 25px;
				font-style: initial;
				font-family: 'Times New Roman', Times, serif; 
			}
			#extra{border:2px solid black; background:whitesmoke; border-radius:1rem;box-shadow:0 0 5px black;width:calc(100% - 24px);margin:auto;float:none;clear:both}
			#extra h6{margin:0}
			.invalid{border:2px solid red!important;background:rgba(255,0,0,0.1)}</style><script src="script.js"></script></head><body><template><fieldset id='extra'><h6>Additional Details Required</h6><label for='Controller_ID'>Controller_ID:</label><select name='Controller-ID' required><option value=""> - Select the Controller ID - </option><option value='A'>A </select><label for='HBA_Ports'>HBA_Ports:</label><input type='text' name='hba-ports' placeholder='Enter the HBA Ports' /> <label for='MC_IP'>MC_IP:</label><input type='text' name='extra-ip' placeholder='Enter the MC_IP' /> <label for='MC_Netmask'>MC_Netmask:</label><input type='text' name='netmask-ip' placeholder='Enter the MC_Netmask' /> <label for='MC_Gateway'>MC_Gateway:</label><input type='text' name='gateway-ip' placeholder='Enter the MC_Gateway' /> <label for='MC'>MC:</label><input type='text' name='rbod-mc' placeholder='Enter the MC Port' /> <label for='SC'>SC:</label><input type='text' name='rbod-sc' placeholder='Enter the SC Port' /> <label for='FU'>FU:</label><input type='text' name='rbod-fu' placeholder='Enter the FU Port' /> <label for='EC'>EC:</label><input type='text' name='rbod-ec' placeholder='Enter the EC Port' /> <label for='Controller_ID'>Controller_ID:</label><select name='Controller-ID' required><option value=""> - Select the Controller ID - </option><option value='B'>B </select><label for='HBA_Ports'>HBA_Ports:</label><input type='text' name='hba-ports' placeholder='Enter the HBA Ports' /> <label for='MC_IP'>MC_IP:</label><input type='text' name='extra-ip' placeholder='Enter the MC_IP' /> <label for='MC_Netmask'>MC_Netmask:</label><input type='text' name='netmask-ip' placeholder='Enter the MC_Netmask' /> <label for='MC_Gateway'>MC_Gateway:</label><input type='text' name='gateway-ip' placeholder='Enter the MC_Gateway' /> <label for='MC'>MC:</label><input type='text' name='rbod-mc' placeholder='Enter the MC Port' /> <label for='SC'>SC:</label><input type='text' name='rbod-sc' placeholder='Enter the SC Port' /> <label for='FU'>FU:</label><input type='text' name='rbod-fu' placeholder='Enter the FU Port' /> <label for='EC'>EC:</label><input type='text' name='rbod-ec' placeholder='Enter the EC Port' /> </fieldset></template><form name='myForm' method='POST'><fieldset><label for='Controller Type'>Controller Type</label><select name='controller' required><option value=""> - Select the Controller - </option><option data-extra=true value='RAID'>RAID<option value='JBOD'>JBOD<option value='AP'>AP</select></fieldset><fieldset><label for='Test Type'>Test Type</label><select name='test' required><option value=""> - Select The Test - </option><option data-extra=true value='BFT'>BFT<option data-extra=true value='CTO'>CTO<option data-extra=true value='RAID Generic'>RAID Generic<option data-extra=true value='Port Check'>Port Check<option data-extra=true value='FW Generic'>FW Generic<option data-extra=true value='JBOD Generic'>JBOD Generic</select></fieldset><!-- insert templated additional details here --><fieldset><label for='Protocol Type'>Protocol Type</label><select name='protocol' disabled><option selected hidden disabled> - Select The Protocol - <option data-extra=true value='SAS'>SAS<option data-extra=true value='iSCSI'>iSCSI<option data-extra=true value='FC'>FC</select></fieldset><fieldset><label for='IP Address'>IP Address:</label><input type='text' name='ip' placeholder='Enter your IP address' required /></fieldset><fieldset><label for='Chasis Input'>Number of Chasis Input:</label><input type='number' name='chassis' placeholder='Enter Number of Chasis' required /></fieldset><fieldset><input type='button' name='save' value='Save data to file' /></fieldset></form></body></html>

Viewing all articles
Browse latest Browse all 140788

Latest Images

Trending Articles



Latest Images