HTML表单HIdden字段添加了Javascript而不是POSTing

时间:2010-05-18 04:51:41

标签: javascript jquery html forms

我有一个用户可以输入链接的表单,单击“添加链接”按钮,然后该链接(通过jQuery)作为隐藏字段添加到表单中。问题是,当我提交表单时,它不是POST。这真的让我很困惑。问题是,如果我将隐藏字段硬编码到表单中,它会被发布,但我的功能由于某种原因不起作用。正如我在Firebug中看到的那样,隐藏字段会添加到我的表单中,但它不会与POST数据一起发送。

请注意,我正在使用Javascript中的数组来保存元素,直到提交表单,并且还明确地发布它们以便用户查看他们添加的内容。我在元素的“name”字段上使用[]表示法,因为我希望链接在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添加到页面并按下提交按钮时,它实际上并没有做任何事情。

3 个答案:

答案 0 :(得分:5)

如果数据未发布到服务器,则输入元素肯定没有添加到表单中。

在表单提交之前尝试执行以下代码:

<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;
}

如果你没有得到你的字段,那么“输入”不会添加到表单中,而是添加到其他地方。

如果你确实得到了这个领域......我们需要深入挖掘。

答案 1 :(得分:2)

亲爱的使用jquery的插件动态添加html dom元素,什么是#link_td ??

答案 2 :(得分:2)

我只知道问题所在。我很尴尬和困惑。如上所述,我正在使用Kohana Framework。不确定这与此有什么关系,但可能很重要。

我的元素按此顺序排列:

<table>
    <form>
       .............form stuff.......
    </form>
</table>

并且在提交表单时不允许我添加的数据加入POST数组,即使使用Kohana的FORM类“硬编码”的元素工作正常。我刚刚注意到它正在整个分支之前。我曾经看过确保我的Kohana视图中有一个Form :: close但是从未想过它会在开始标记之后直接关闭。

非常感谢你的帮助。这是那些没有意义的错误之一,但我想有点理由为什么$ .append之前没有工作。我一直看着,看到它直接附加在其他标签旁边,这些标签与POST数据一起发送,因此假设所有这些都发生在FORM内。

任何人都可以解释为什么需要封装,而不是相反,以便HTML正确呈现它?或者这更可能是一个Kohana问题?

非常感谢大家的帮助,这是一个很好的(但非常令人沮丧的)课程。