AWG Blogs

Wednesday, August 7, 2013

Get Value of Form Element

I had names to compare only (as they are generated from DB). I needed the value regardless of element type; most would try to detect type then get the value.

For now I will settle on a one liner expression, and see how it goes in testing:

 $("input[name='NameOfElement']:checked").val() || document['formName']['NameOfElement'].value || false

This should handle radio buttons and checkboxes first (if checked), then selects and inputs, then false. My use case doesn't require comparing values of textareas or multiselects, so I am not accounting for them for now.
Note: I found the above to cause "Do you want to continue running scripts on this page?" messages on old clients, namely IE 7 or 8 on single core Windows XP PCs. So I was forced to replace the above jQuery-reliant code with the following more verbose pure JavaScript:
if ( ! ( (document['Form1']['ItemFoo'].length && document['Form1']['ItemFoo'][0].type=="radio" && myGetSelectedRadioValueByName('ItemFoo')=="Yes") || (!document['Form1']['ItemFoo'].disabled && document['Form1']['ItemFoo'].type=="checkbox" && document['Form1']['ItemFoo'].checked==true && document['Form1']['ItemFoo'].value == "Yes") || (!document['Form1']['ItemFoo'].disabled && document['Form1']['ItemFoo'].type!="checkbox" && document['Form1']['ItemFoo'].value == "Yes"))){ var elems = document.getElementsByName('TargetShowHideElement'); for (var i = 0; i < elems.length; i++) { elems[i].disabled= false; } }


A side note about the above: It is a work in progress; the language-specific expressions are generated from a DSL (a table of variables and corresponding conditions), in a manner similar to a suggestion by "Doc Brown" at http://programmers.stackexchange.com/questions/182025/creating-huge-decision-tree