【问题标题】:HTML Form HIdden Fields added with Javascript not POSTing使用 Javascript 添加的 HTML 表单隐藏字段未发布
【发布时间】:2011-02-20 17:31:12
【问题描述】:

我有一个表单,用户可以在其中输入链接,单击“添加链接”按钮,然后(通过 jQuery)将该链接作为隐藏字段添加到表单中。问题是我提交表单时它没有发布。它真的开始让我感到困惑。问题是,如果我将隐藏字段硬编码到表单中,它会被发布,但我的功能由于某种原因无法正常工作。正如我在 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 添加到页面并按下提交按钮的那一刻起,它并没有真正做任何事情。

【问题讨论】:

    标签: javascript jquery html forms


    【解决方案1】:

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

    【讨论】:

    • #link_td 是一个表格单元格,我在其中存储隐藏的链接。 。附加? - 如果需要另一个 jQuery 插件来附加 HTML 元素,我不知道......而且我宁愿不使用它。这真的不是火箭科学,我认为这是非常基本的。
    • 是的,这不是真正的火箭科学,您正在附加 '' 字符串,而不是通过 jquery/javascript 创建 dom
    • jQuery 足够聪明,可以为你添加节点
    • 是的,但最好通过dom对象添加
    • Chirag,你绝对是在正确的轨道上。谢谢您的帮助。我只需要弄清楚为什么没有将元素添加到 DOM 中。 .append 显然没有像你所说的那样做。
    【解决方案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;
    }
    

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

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

    【讨论】:

    • 同样,也值得了解和喜爱firebug的Net面板。
    • @master 和@curtaindog,我已经在使用 Firebug 网络面板并且确实喜欢它。不幸的是,我的数据不在提交表单时发送到服务器的 POST 数据中。如上所述,我想添加的隐藏 元素在我运行我的 javascript 函数时准确地附加到我的文档中......它只是没有在 POST 数据中结束。此外,我隐藏的 元素看起来与表单中的硬编码元素完全一样,并且正在提交给 POST。不知道是不是框架问题?
    • 您的字段是否在表单的元素列表中?
    • @MasterGaurav,我想 jQuery 的 .append 方法没有像 Chirag 所说的那样将链接添加到 DOM。知道为什么不,还有什么更好的选择?
    • @dscher:扩展 Chirag 的问题 - #link_td 元素在表单元素中吗?否则附加方法是很好的工具(api.jquery.com/append
    【解决方案3】:

    我刚刚发现问题出在哪里。我感到尴尬和困惑。如前所述,我正在使用 Kohana 框架。不确定这是否与此有关,但可能很重要。

    我的元素是这样排列的:

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

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

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

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

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

    【讨论】:

    • 好吧,我个人会在表单元素中使用表格而不是当前表单(表格中的表格),这样我在表格中添加的任何输入/选择/文本区域都会自动添加到表单中。 ................ 看到我最后的评论提出了一个非常有针对性的问题 - 表单元素中的#link_td 元素吗? :)
    • @master,它是/曾经在表格和表格中......表格在 标签之前直接关闭,所以我真的没有看到它有问题。我不确定为什么它会很重要,因为表格后面紧跟着打开表单标签,而关闭表单标签紧跟在关闭表格标签之后。不确定我是否理解问题仍然存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多