динамический элемент создан не POSTed - PullRequest
2 голосов
/ 14 сентября 2011

Я создаю элемент выбора HTML динамически после того, как пользователь сделал выбор из другого элемента выбора. Однако PHP-скрипт для проверки формы не распознает новый элемент и указывает на его нулевое значение:

Вот фрагменты:

some.js:
if(document.getElementById(firstselect).value=='somvalue'){
    document.getElementById(gamsDiv).removeChild(gamsElem);
    gamsElem = document.createElement("select");
    gamsElem.id = "FacilityGamsId";
    gamsElem.name = "FacilityGamsId";
   gamsElem.setAttribute("onChange", "updateHidden(this);makeUpdateRequest(arguments[0],this)");                    
    opt = document.createElement("option");
    opt.text="Select one ";
    opt.value=0;
    gamsElem.options.add(opt);
    .....some other stuff
    .....                           
    document.getElementById(gamsDiv).appendChild(gamsElem);

}

the php script:

if($_POST){
    var_dump($_POST['FacilityGamsId'];
}

result: null

Есть ли какая-либо причина, по которой серверное действие post не распознает ЛЮБОЙ из моих динамических элементов HTML из скрипта js. Если я проверяю / проверяю вновь созданные элементы, имя и идентификатор точно совпадают.

Любая помощь высоко ценится;). Спасибо

Ответы [ 4 ]

1 голос
/ 14 сентября 2011

Здесь:

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 значение ноль и просто добавьте новые).

1 голос
/ 14 сентября 2011

Не добавляется в форму, хранящуюся в DOM браузера.

Этот парень пытался сделать то же самое: динамический элемент создан не POSTed

Решением было бы создание динамической формы на стороне сервера - если она действительно должна быть на стороне клиента, я думаю, что вам нужно манипулировать формой (хранится в document.forms) в дополнение к DOM.

0 голосов
/ 14 сентября 2011

Запустите этот код после того, как DOM будет готов, предпочтительно $ .ready () в jquery.

, а также поставить кавычки вокруг имени div ("gamsDiv")

0 голосов
/ 14 сентября 2011

Вы должны добавить новый элемент в тэг FORM

...