Здесь:
gamsElem.options.add(opt);
add - это метод выбора элемента интерфейса , а не options (который является HTMLElement Collection и не имеет добавить метод). Итак:
gamsElem.add(opt);
должен исправить проблему.
Note that gamsElem.add(opt); does not work in Mozilla firefox 6 so I reverted to my old code of gamsElem.options.add(opt).
И
gamsElem.setAttribute("onChange",
"updateHidden(this);makeUpdateRequest(arguments[0],this)");
будет лучше как:
gamsElem.onchange = function() {
updateHidden(this);
makeUpdateRequest(arguments[0], this);
};
хотя я понятия не имею, на что arguments [0] должны ссылаться.
Вот как это будет сделано в обычном режиме (хотя кнопка будет вызывать функцию, а не иметь фрагмент встроенного кода, я сделал это таким образом только для удобства):
<form action="">
<div id="div0">
<select id="sel0" name="sel0">
<option>option 0
</select>
<input type="submit">
</div>
</form>
<button onclick="
var div = document.getElementById('div0');
var sel = document.getElementById('sel0');
div.removeChild(sel);
sel = document.createElement('select');
sel.id = 'sel1';
sel.name = 'sel1';
sel.onchange = function(){alert(this.value);};
sel.options[0] = new Option('Select one', '0');
sel.options[1] = new Option('Select two', '1');
div.appendChild(sel);
">Replace select</button>
Второй вариант необходим, чтобы вызвать onchange слушатель к огню.
Если вы хотите заменить один элемент другим, создайте новый элемент, а затем просто замените старый:
<button onclick="
var oldSel = document.getElementById('sel0');
var sel = document.createElement('select');
sel.id = 'sel1';
sel.name = 'sel1';
sel.onchange = function(){alert(this.value);};
sel.options[0] = new Option('Select one', '0');
sel.options[1] = new Option('Select two', '1');
oldSel.parentNode.replaceChild(sel, oldSel);
">Replace select</button>
Или вы можете просто заменить параметры (установите для параметра select.length значение ноль и просто добавьте новые).