| | |
Making T.Greer's JavaScript-synthesised combobox dynamic
Please support our JavaScript / DHTML / AJAX advertiser: PostgreSQL or MySQL? Compare and contrast the two most popular open source databases
![]() |
•
•
Join Date: Sep 2005
Posts: 2
Reputation:
Solved Threads: 0
I came across T. Greer's very clever demonstration of how to provide an HTML combobox at http://www.tgreer.com/comboArticle.html. I realised, however, that for the purposes of the demonstration the example combobox is placed at an absolute position on the page. I tried to make it dynamic, but have encountered difficulties. Would someone be kind enough to help? (I'm a novice JavaScript programmer.)
Take the original and comment out the '<style type="text/css">...<!--<style type="text/css">' near the top. Alter the order of the HTML of the selector and the input box so that the selector is first. (This does away with the need to use .zIndex, which I couldn't make work in any case.) Remove the 'class="DropDown"' from the selector and the 'class="TxtBox"' from the input box. Add an initial paragraph of text and a reset button. Then change the content of the ieStinks() JavaScript procedure to get the attached HTML/JavaScript file.
This works fine with Firefox on Linux. I've not been able to try it with Internet Explorer. My problem is that I'd like to use the calculated values for selector.style.width, textbox.style.width and the upward adjustment of the textbox position: '"-" + textbox.style.height', but find that only the literal values ("120px", "100px" and "-20px") work. There is also a minor aesthetic problem: the definition of "relative" (see "javascript: The Definitive Guide" by David Flanagan, O'Reilly) says that "The space allocated for the [relative-re-positioned] element in the normal document flow remains allocated for it, and the elements on either side of it do not close up ...". Can this be avoided without repositioning other elements by hand, which would be a nuisance?
The ideal, of course, is to have ieStinks(), fakeCombo() and mySelect() process any synthesized comboboxes placed in the HTML page automatically, without having to pass these procedures their names.
Take the original and comment out the '<style type="text/css">...<!--<style type="text/css">' near the top. Alter the order of the HTML of the selector and the input box so that the selector is first. (This does away with the need to use .zIndex, which I couldn't make work in any case.) Remove the 'class="DropDown"' from the selector and the 'class="TxtBox"' from the input box. Add an initial paragraph of text and a reset button. Then change the content of the ieStinks() JavaScript procedure to get the attached HTML/JavaScript file.
This works fine with Firefox on Linux. I've not been able to try it with Internet Explorer. My problem is that I'd like to use the calculated values for selector.style.width, textbox.style.width and the upward adjustment of the textbox position: '"-" + textbox.style.height', but find that only the literal values ("120px", "100px" and "-20px") work. There is also a minor aesthetic problem: the definition of "relative" (see "javascript: The Definitive Guide" by David Flanagan, O'Reilly) says that "The space allocated for the [relative-re-positioned] element in the normal document flow remains allocated for it, and the elements on either side of it do not close up ...". Can this be avoided without repositioning other elements by hand, which would be a nuisance?
The ideal, of course, is to have ieStinks(), fakeCombo() and mySelect() process any synthesized comboboxes placed in the HTML page automatically, without having to pass these procedures their names.
•
•
Join Date: Dec 2004
Posts: 1,655
Reputation:
Solved Threads: 35
T. Greer happens to be a member of Daniweb. In fact he moderates this forum. In actual fact, he's me. I haven't looked at that example in quite awhile. I removed your attachment because I have it on good authority the author doesn't wish the code distributed.
However, please reply with your own code listing of the mods you've made. I'm not entirely clear what you're wanting to do. Modifying the code to support any/all select/text input combos on the page would be quite a task, one I'm not willing to do for free!
IE has a bug with z-index and SELECT controls, so you'll never "make it work" until they fix it.
However, please reply with your own code listing of the mods you've made. I'm not entirely clear what you're wanting to do. Modifying the code to support any/all select/text input combos on the page would be quite a task, one I'm not willing to do for free!
IE has a bug with z-index and SELECT controls, so you'll never "make it work" until they fix it.
:lol: Wow somebody was realy unfortunate.
:mrgreen:Congratulation to JAM in finding his lost friend tgreer
(sorry, but what is the possibility of ocurence for situation like this??)
:mrgreen:Congratulation to JAM in finding his lost friend tgreer
(sorry, but what is the possibility of ocurence for situation like this??)
Learn to see in another's calamity the ills which you should avoid.
Publilius Syrus
(~100 BC)
LJC - London Java Community, Graduate & Undergraduate Software Development Community, JAVAWUG (Java Web User Group), The London Android Group
Publilius Syrus
(~100 BC)
LJC - London Java Community, Graduate & Undergraduate Software Development Community, JAVAWUG (Java Web User Group), The London Android Group
•
•
Join Date: Dec 2004
Posts: 1,655
Reputation:
Solved Threads: 35
I imagine it wasn't a coincidence. We'll have to see what he says, but I imagine he followed a link from my site to daniweb, and posted the question knowing I was here. Wishful thinking on his part, perhaps, because I'm not much interested in taking that little example and fleshing it out to a complete, dynamic program.
You're welcome to take a crack at it, though.
You're welcome to take a crack at it, though.
•
•
Join Date: Sep 2005
Posts: 2
Reputation:
Solved Threads: 0
•
•
•
•
Originally Posted by tgreer
T. Greer happens to be a member of Daniweb. In fact he moderates this forum. In actual fact, he's me. I haven't looked at that example in quite awhile. I removed your attachment because I have it on good authority the author doesn't wish the code distributed.
•
•
•
•
Originally Posted by tgreer
However, please reply with your own code listing of the mods you've made. I'm not entirely clear what you're wanting to do. Modifying the code to support any/all select/text input combos on the page would be quite a task, one I'm not willing to do for free!
Comment out or delete the <style...</style> part, and the class=... attribute assignments in the selector and the input box. Exchange the order of the selector and the input so the selector is first. Define a max() function and replace the body of the ieStinks() function with:
JavaScript / DHTML / AJAX Syntax (Toggle Plain Text)
function max(x, y) { return (x > y) ? x : y; } function ieStinks() { for (var formindex = 0; thisform = document.forms[formindex]; formindex++) { for (var elementindex = 0; thiselement = thisform.elements[elementindex]; elementindex++) { /* DEBUG alert('element name="' + thiselement.name + '" id="' + thiselement.id + '"');*/ if (thiselement.id.substr(0, 3) == 'sel') { var sel = thiselement; var txt = document.getElementById("txt" + thiselement.id.substr(3)); if (txt) { var maxw = max(parseInt(sel.offsetWidth) - parseInt(sel.offsetHeight), parseInt(txt.offsetWidth)); var selw = maxw + sel.offsetHeight; /* Assume pulldown is square */ var txtw = maxw; /* DEBUG alert('sel.id = "' + sel.id + '", txt.id = "' + txt.id + '"'); */ sel.style.border = "0px"; sel.style.width = selw + "px"; txt.style.width = txtw + "px"; if (navigator.appName != "Microsoft Internet Explorer") { txt.style.position = "relative"; txt.style.top = "-" + sel.offsetHeight + "px"; } } } } } }
All selector and input pairs which are to form a synthesised combobox must be given ids of the form 'sel'* and 'txt'*, where '*' is a unique identifier - e.g. 'selCar' and 'txtCar'; 'selCity' and 'txtCity'; etc.
Replace the "selCombo" in fakeCombo() by:
JavaScript / DHTML / AJAX Syntax (Toggle Plain Text)
"sel" + x.id.substr(3)
and the "txtCombo" in mySelect() by:
JavaScript / DHTML / AJAX Syntax (Toggle Plain Text)
"txt" + x.id.substr(3))
You can then place several selector/input combobox pairs anywhere on your web page. You can apply a CSS style to them if you wish, but you cannot make a text box have an absolute position. The only little problem is the aesthetic one I mentioned, for which I see no solution.
I'm just a novice JavaScript programmer - started yesterday. It's very likely my code - which has complexity O(n**2) in elements - can be improved.
•
•
•
•
Originally Posted by tgreer
IE has a bug with z-index and SELECT controls, so you'll never "make it work" until they fix it.
I still think your idea and implementation is very clever. Thank you very much for putting it on your web site, as it has been a very useful educational exercise in JavaScript for me.
![]() |
Similar Threads
- js calculator (JavaScript / DHTML / AJAX)
- javascript to add select button (JavaScript / DHTML / AJAX)
- Need help in design and javascript code for Dynamic form (JavaScript / DHTML / AJAX)
- Make your own javascript maze. (JavaScript / DHTML / AJAX)
Other Threads in the JavaScript / DHTML / AJAX Forum
- Previous Thread: website password protection
- Next Thread: The best way to redirect visitors...
| Thread Tools | Search this Thread |
acid2 ajax ajaxexample ajaxjspservlets array browser bug captchaformproblem cart checkbox child class close codes createrange() css cursor date debugger decimal dependent design disablefirebug dom dropdown editor element embed engine enter error events explorer ext file firefox focus form forms frameworks getselection google gxt hiddenvalue highlightedword hint html ie7 ie8 iframe images index internet java javascript javascripthelp2020 jquery jsf jsfile jsp jump libcurl listbox maps masterpage math media menu mp4 object onmouseoutdivproblem onmouseover onreadystatechange parent paypal pdf php position post problem programming progressbar prototype redirect runtime safari scale scriptlets scroll search security shopping size software toggle unicode w3c web wysiwyg \n






