User Name Password Register
DaniWeb IT Discussion Community
All
What is DaniWeb IT Discussion Community?
You're currently browsing the JavaScript / DHTML / AJAX section within the Web Development category of DaniWeb, a massive community of 423,887 software developers, web developers, Internet marketers, and tech gurus who are all enthusiastic about making contacts, networking, and learning from each other. In fact, there are 4,274 IT professionals currently interacting right now! Registration is free, only takes a minute and lets you enjoy all of the interactive features of the site.
Please support our JavaScript / DHTML / AJAX advertiser: Lunarpages Web Hosting
Views: 4091 | Replies: 5
Reply
Join Date: Sep 2005
Posts: 2
Reputation: JAM is an unknown quantity at this point 
Rep Power: 0
Solved Threads: 0
JAM JAM is offline Offline
Newbie Poster

Making T.Greer's JavaScript-synthesised combobox dynamic

  #1  
Sep 28th, 2005
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.
AddThis Social Bookmark Button
Reply With Quote  
Join Date: Dec 2004
Posts: 1,590
Reputation: tgreer is an unknown quantity at this point 
Rep Power: 7
Solved Threads: 35
Colleague
tgreer tgreer is offline Offline
Made Her Cry

Re: Making T.Greer's JavaScript-synthesised combobox dynamic

  #2  
Sep 28th, 2005
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.
Reply With Quote  
Join Date: Dec 2004
Location: London or Slovakia
Posts: 2,435
Reputation: peter_budo is a jewel in the rough peter_budo is a jewel in the rough peter_budo is a jewel in the rough peter_budo is a jewel in the rough 
Rep Power: 11
Solved Threads: 295
Moderator
Featured Poster
peter_budo's Avatar
peter_budo peter_budo is offline Offline
Code tags enforcer

Re: Making T.Greer's JavaScript-synthesised combobox dynamic

  #3  
Sep 29th, 2005
: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??)
Learn to see in another's calamity the ills which you should avoid.
Publilius Syrus
(~100 BC)

If we helped you to solve your problem, answered your question please mark your post as SOLVED.
Reply With Quote  
Join Date: Dec 2004
Posts: 1,590
Reputation: tgreer is an unknown quantity at this point 
Rep Power: 7
Solved Threads: 35
Colleague
tgreer tgreer is offline Offline
Made Her Cry

Re: Making T.Greer's JavaScript-synthesised combobox dynamic

  #4  
Sep 29th, 2005
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.
Reply With Quote  
Join Date: Sep 2005
Posts: 2
Reputation: JAM is an unknown quantity at this point 
Rep Power: 0
Solved Threads: 0
JAM JAM is offline Offline
Newbie Poster

Re: Making T.Greer's JavaScript-synthesised combobox dynamic

  #5  
Sep 29th, 2005
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.

Ah, my apologies. Since I couldn't see any copyright notice on the original page with your code, I didn't realise that you wouldn't want me to post your original code with my changes as an attachment in this forum. I'm from a University, and I'm interested in your demonstration for educational and not commercial purposes. Yes, I had seen the connection between the author of the code and the moderator of this forum - from my point of view that was coincidental, since the problem I was having was one with JavaScript in general and not with the specifics of your example. I've now solved my own problem.

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!

I didn't expect you to enhance your code for me - or anyone else - without reward. What I wanted to do was to allow the use of more than one such synthesised HTML combobox, and at any position on the page. Here are the changes required for my own fully dynamic, unparameterised, solution:

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:

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:

"sel" + x.id.substr(3)

and the "txtCombo" in mySelect() by:

"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.

Indeed, that was clear from your original article.

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.
Reply With Quote  
Join Date: Dec 2004
Posts: 1,590
Reputation: tgreer is an unknown quantity at this point 
Rep Power: 7
Solved Threads: 35
Colleague
tgreer tgreer is offline Offline
Made Her Cry

Re: Making T.Greer's JavaScript-synthesised combobox dynamic

  #6  
Sep 29th, 2005
You're welcome. Thanks for the nice follow-up post.
Reply With Quote  
Reply

Only community members can participate in forum threads. You must register or log in to contribute.

DaniWeb JavaScript / DHTML / AJAX Marketplace
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)

 

Thread Tools Display Modes

Similar Threads
Other Threads in the JavaScript / DHTML / AJAX Forum

All times are GMT -4. The time now is 4:49 am.
Forum system based on vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
©2003 - 2008 DaniWeb® LLC