dsc*_*her 11 html javascript forms jquery
我有一个表单,用户可以在其中输入链接,单击"添加链接"按钮,然后该链接(通过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 + '"/>';
Run Code Online (Sandbox Code Playgroud)
有没有人知道为什么这可能不会发布.如上所述,任何与上述几乎完全相同的硬编码标签工作正常,只是这个标签不起作用.以下是我使用jquery将标记添加到表单的方法:
$('#link_td').append( make_hidden_element_tag('links', link, link_array.length - 1));
Run Code Online (Sandbox Code Playgroud)
我正在使用Kohana 3框架,虽然我不确定是否对此有任何影响,因为从HTML添加到页面并按下提交按钮时它实际上并没有做任何事情.
如果数据未发布到服务器,则输入元素肯定不会添加到表单中.
在表单提交之前尝试执行以下代码:
<form onsubmit="return doBeforeSubmit(this);"> ... </form>
Run Code Online (Sandbox Code Playgroud)
功能是......
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;
}
Run Code Online (Sandbox Code Playgroud)
如果你没有得到你的字段,那么"输入"不会添加到表单中,而是添加到其他地方.
如果你确实得到了这个领域......我们需要深入挖掘.
我刚刚弄清楚问题是什么。我感到尴尬和困惑。如前所述,我正在使用 Kohana 框架。不确定这与此有什么关系,但这可能很重要。
我的元素按以下顺序排列:
<table>
<form>
.............form stuff.......
</form>
</table>
Run Code Online (Sandbox Code Playgroud)
并且在提交表单时不允许我添加的数据加入 POST 数组,即使使用 Kohana 的 FORM 类“硬编码”的元素工作正常。我刚刚注意到它出现在整个分支之前。我曾试图确保我的 Kohana 视图中有一个 Form::close ,但没想到它会在开始标签之后直接关闭。
非常感谢您的帮助。这是那些没有意义的错误之一,但我想这有点道理为什么 $.append 以前不起作用。我总是查看并看到它直接附加在与 POST 数据一起发送的其他标签旁边,因此假设所有这些都发生在 FORM 内部。
谁能解释为什么需要封装而不是反之亦然才能使 HTML 正确呈现?或者这更有可能是 Kohana 问题?
非常感谢大家的帮助,这是一个很好的(但非常令人沮丧的)教训。