HTML-форма HIdden Fields добавлена с Javascript, а не POSTing
У меня есть форма, в которой пользователь может ввести ссылку, нажать кнопку "добавить ссылку", и эта ссылка затем (через jQuery) добавляется в форму как скрытое поле. Проблема в том, что это не POSTing, когда я отправляю форму. Это действительно меня пугает. Дело в том, что если я жестко задаю скрытое поле в форме, оно опубликовано, но по какой-то причине моя функция не работает. Скрытое поле ДОЛЖНО добавляться в мою форму, как я могу видеть с Firebug, но просто не отправляется с данными POST.
Только для того, чтобы заметить, я использую массив в Javascript для хранения элементов до тех пор, пока форма не будет отправлена, что также заметно отобразит их для пользователя, чтобы увидеть, что они добавили. Я использую [] нотацию в поле "имя" элемента, потому что я хочу, чтобы ссылки были связаны с массивом в PHP.
Вот ссылка, которая добавляется к моей форме:
function make_hidden_element_tag(item_type, item_content, item_id)
{
return '<input type="hidden" name="' + item_type + '[]" id="hidden_link_' + item_id + '" value="' + item_content + '"/>';
Есть ли у кого-нибудь идея, почему это может быть не публикация. Как указано выше, любые жестко закодированные теги, которые почти идентичны приведенным выше, отлично работают, просто он не работает. Вот как я добавляю тег в форму с помощью jquery:
$('#link_td').append( make_hidden_element_tag('links', link, link_array.length - 1));
Я использую структуру Kohana 3, хотя я не уверен, что это имеет какое-то отношение к этому, потому что это не делает ничего с момента добавления HTML на страницу и нажатия кнопки отправки.
Ответы
Ответ 1
Я только что понял, в чем проблема. Я смущен и смущен. Как я уже сказал, я использую Kohana Framework. Не уверен, что это имеет какое-либо отношение к этому, но это может быть важно.
У меня были мои элементы в следующем порядке:
<table>
<form>
.............form stuff.......
</form>
</table>
и это не позволяло моим добавленным данным присоединиться к массиву POST при отправке формы, хотя элементы, которые были "жестко закодированы" с использованием класса Kohana FORM, работали нормально. Я только заметил, что он шел перед всей веткой. Я посмотрел, чтобы убедиться, что у меня есть форма:: закрыть в моем представлении Коханы, но никогда не предполагала, что она закрывается сразу после открытия тега.
Большое спасибо за помощь. Это одна из тех ошибок, которые просто не имеют смысла, но я думаю, что это имеет смысл, почему $.append не работал раньше. Я всегда смотрел и видел, как он добавляется непосредственно рядом с другими тегами, которые были отправлены с данными POST, и предположил, что все это происходит внутри FORM.
Может ли кто-нибудь объяснить, почему нужно инкапсулировать, а не наоборот, чтобы HTML правильно отображал его? Или это скорее будет проблемой Коханы?
Спасибо всем за помощь, это был хороший (но крайне расстраивающий) урок.
Ответ 2
Если данные не отправляются на сервер, элемент ввода определенно не добавляется в форму.
Попробуйте выполнить следующий фрагмент кода перед отправкой формы:
<form onsubmit="return doBeforeSubmit(this);"> ... </form>
И функция...
function doBeforeSubmit(form)
{
var es = form.elements;
var l = es.length;
var msgs = [];
for(var idx = 0; idx < l; idx++)
{
var e = es[idx];
msgs.push('name=' + e.name + ', type=' + e.type + ', value=' + e.value;
}
alert(msgs.join('\n'));
return false;
}
Если вы не получили свое поле, тогда "enter" не добавляется в форму, но в другом месте.
Если вы получите поле... нам нужно будет копать глубже.
Ответ 3
Дорогое использование плагина jquery для динамического добавления элементов html dom, что такое #link_td??