У меня есть форма с таблицей, которая имеет два поля ввода, поле выбора и несколько флажков. Все поля формы используют dojoType = "dijit.form. {TheFieldType}".
Когда пользователь нажимает кнопку добавления, из файла JSP загружается новая таблица с такими же полями. Это моя функция AJAX:
<script language="javascript">
dojo.addOnLoad(passNumber);
function passNumber() {
var count = 0;
dojo.query('#add').onclick(function() {
var dNode = dojo.byId('more');
count++;
dojo.xhrGet({url: 'add.html',
handleAs: "text",
preventCache: true,
content:{fieldId:count} ,
load: function(data) {
dNode.innerHTML += data;
dojo.parser.parse(dNode);
},
error: function(error) {
dNode.innerHTML += "AJAX error: " + error;
}
});
});
}
</script>
При нажатии на кнопку добавления все работает как надо.
Проблема возникает, когда вы нажимаете кнопку добавления более одного раза. При нескольких щелчках мышью поля в таблице добавляются в форму правильно, но все поля dojoType теперь доступны только для чтения (кроме самой новой добавленной таблицы).
Этим утром я искал несколько часов и не смог найти правильного решения для этого. Я видел, как некоторые люди писали об уничтожении объектов, в то время как другие говорили только о разборе новейших полей. Я попробовал несколько методов и не смог заставить его работать.
У меня есть простая работа, которая может помочь кому-то в том же положении.
<script language="javascript">
dojo.addOnLoad(passNumber);
function passNumber() {
var count = 0;
dojo.query('#add').onclick(function() {
var dNode = dojo.byId('more'+count);
count++;
dojo.xhrGet({url: 'add.html',
handleAs: "text",
preventCache: true,
content:{fieldId:count} ,
load: function(data) {
dNode.innerHTML = data;
dojo.parser.parse(dNode);
},
error: function(error) {
dNode.innerHTML += "AJAX error: " + error;
}
});
});
}
</script>
Основным отличием является то, что + = в dNode.innerHTML теперь является только =. Также я анализирую только самый новый элемент div. На моем jsp я добавил пустой контейнер div с именем 'more' + пройденное число.
Я новичок в додзё, так что может быть простое объяснение или решение моей первоначальной проблемы. Но я хотел поделиться своим исправлением для тех, кто сталкивался с той же проблемой.
Спасибо