[Zope] Form data type coercion syntax and javascript

Mayers, Philip J p.mayers@ic.ac.uk
Wed, 17 Jan 2001 11:50:54 -0000


Not a problem per-se, just a query - how are people dealing with things like
this:

<dtml-var standard_html_header>
<FORM>
<SELECT MULTIPLE NAME="test">
</SELECT>

<SCRIPT LANGUAGE="JavaScript">

function populate(form) {
  for (var i=0;i<4;i++) {
    form.test.options[i] = new Option("Red"+i,"color_red");
    if (i == 0)
      form.test.options[i].selected = true;
  }
  return false;
}

</SCRIPT>

<INPUT TYPE="BUTTON" onClick="populate(this.form)" VALUE="Fill in">
<INPUT TYPE="SUBMIT" VALUE="Go">
</FORM>

<dtml-var standard_html_footer>

If a user selects multiple values, of the dynamic list, Zope will coerce
them to a list when the form is input. *BUT*, if they select a single value,
it'll be a single string/integer. Normally, you'd do this:

<SELECT NAME="test:list">

But how do you access it from JavaScript then? I'm doing this:

function populate(form) {

  var list = form;

  for (var j=0;j<form.length;j++) {
    if (form.elements[j].name == "test:list")
      list = form.elements[j];
  }

  if (list == form)
    return false;

  for (var i=0;i<4;i++) {
    list.options[i] = new Option("Red"+i,"color_red");
    if (i == 0)
      list.options[i].selected = true;
  }
  return false;
}

Anything more elegant?

Regards,
Phil

+----------------------------------+
| Phil Mayers, Network Support     |
| Centre for Computing Services    |
| Imperial College                 |
+----------------------------------+