【问题标题】:form won't submit表格不会提交
【发布时间】:2010-02-20 21:23:20
【问题描述】:

我的表单提交有问题,这是交易。我正在创建一个图片网站,我想为每张图片创建 cmets,所以我有一个锚链接,点击它会显示 cmets 表单,即将 html 加载到最初不在里面的网页中,所以页面内加载的表单未提交。

动态加载到网页中的表单是否可能无法提交?这还有什么其他问题?我什至尝试在加载的内容中添加<a href="#" id="test">Click me</a> 之类的内容并添加了

$("#test").click(function(){
alert("SOMETHING");
});

到我的javascript,它也不会发出警报..我做错了什么?

编辑

好的,这就是我加载表单的方式..

我的图片下方有一个锚链接:

<a href="javascript:;" onclick="showComments('22');" class="answer_comment">Add image content</a>

这是文档就绪功能之外的 javascript:

function showComments(post){
         var xHTML = "<div class=\"addComment\">";
         xHTML += "<form action=\"<?=base_url()?>images/post_comment/" + post + "\" method=\"post\" id=\"comment_form\" name=\"comment_form\">";
         xHTML += "<input type=\"hidden\" id=\"comment_post_id\" name=\"comment_post_id\" value=\"" +post + "\"/>"; 
         xHTML += "<textarea name=\"comment_text\" class=\"comment\" rows=\"8\" cols=\"40\"></textarea>";
     .....

像这样我填写我的 cmets 表格.. 需要更多代码吗?

【问题讨论】:

  • 您获取的 HTML 是什么样的?
  • @Pekka 我更新了我的问题..

标签: javascript jquery html


【解决方案1】:

动态加载的元素也必须在您的情况下进行装配以发出警报,您想要:

$("#test").live('click', function() {
  alert("SOMETHING");
});

这将对带有id="test" 的任何元素触发,无论它是否加载了ajax。对于您要使用的任何处理程序,都应使用相同的样式。阅读.live() documentation 以获取完整的故事...基本上它位于根 DOM 级别,监听点击并对其进行操作,因此它不关心在定义事件处理程序时存在或不存在什么,它是您想要的动态加载内容。

【讨论】:

  • 你是对的,点击功能不工作,但你的直播功能工作,这是为什么呢?
  • 因为当你设置click事件时,它只适用于设置时已经存在的DOM元素,而不适用于未来的。 +1 - 我从来不明白 live 有什么用,现在我明白了。
  • @Nick Craver 我直到现在都没有得到活的东西,很好的答案,完全搞定了 + 1 + 接受
  • 我想知道 jQuery 是否应该被设计为在分配处理程序时使“实时”功能成为默认行为(带有禁用选项),因为它似乎是许多人的症结所在。
  • @patrick - 对此进行全局设置可能是有意义的,但是对于单个元素上的非 ajax 页面加载处理程序,将所有处理程序放在顶部会更昂贵。我同意像$.defaultLive=true; 这样的单一设置器在许多情况下会非常很好。
【解决方案2】:

在函数 () 之后不需要{ 吗?

还有一个}' before the);` 在第三行?

$("#test").click(function() {
alert("SOMETHING"); 
}); 

【讨论】:

  • 好吧对不起……当我不立即知道问题的答案时,我倾向于查看发布的代码的语法。我有几次偶然发现错误只是为了发现(经过很长时间)代码的语法是错误的。尤其是使用 javascript,这很难立即找到。但也许我是唯一犯这种错误的人。不过,您的问题得到了很好的回答 - 我今天学到了一些东西。
【解决方案3】:

您在代码末尾添加了一个额外的{:

$("#test").click(function()
alert("SOMETHING");
{);

更正一下,如果它仍然不起作用,请尝试使用live 方法,该方法适用于现在和未来元素。

$("#test").live('click', function(){
  alert("something");
});

另外,如果有多个表格,请确保它们没有重叠。

【讨论】:

    【解决方案4】:

    动态添加的表单应与原始 html 中的表单行为相同。确保在添加元素后添加事件处理程序或使用 live 方法。

    【讨论】:

      【解决方案5】:

      使用 AJAX 获取表单通常不是问题。

      想到表单无法提交的唯一原因:

      • 这不是有效的 HTML - 应该可以使用 firebug 找出来

      • 提交时,您通过其 ID(如 $('#comment_form').submit();)对其进行寻址,但由于已经存在具有该 ID 的某些元素而失败。要确定是否是这种情况,请尝试在表单中注入一个普通的&lt;input type=submit&gt;,看看是否有效。

      • 您正在将其注入另一个 &lt;form&gt; 元素 - 使用 Firebug 很容易找到

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-30
        相关资源
        最近更新 更多