【问题标题】:AjaxForm with multiple id具有多个 id 的 AjaxForm
【发布时间】:2013-08-11 11:31:18
【问题描述】:

我在自动生成的每个 div 上都有一个评论字段。只有在第一次发布时,ajax 才能在不刷新页面的情况下工作。

while($fimage = mysql_fetch_assoc($followers)){ .........

    <form class="commentFiled"  method='post' id="comment" name="comment"   
action="func/post_comment.php" >
    <input  required type="text"  id="com" name="com" placeholder="Write a comment..." style="width:97%; height: 45px;"
    class="commentTextField">
    <input type="hidden" name="p" value="<?php echo $disid ?>" id="photo" />
    </form>

我的ajaxForm

 <script type="text/javascript">
$("#comment").ajaxForm( {
target: '#wtf', 
success: function() { 
$('#com').val('');
$('#com').blur();
//$('#da').slideUp('fast'); 
} 
});

我想要的是,在每个帖子上,当我发布它时它不会刷新,表单不会得到第二个帖子ID 我猜。 ,你能告诉我我应该怎么做吗?因为我在这里迷路了。谢谢

【问题讨论】:

  • 不要在同一页面上多次使用相同的id 属性:它是无效的 html,从逻辑上讲,JavaScript 如何工作?当您说$('#com').val(''); 时,它如何知道您要清除多个id="com" 元素中的哪一个?
  • @nnnnnn 你是什么意思?我在哪里使用相同的 id?
  • @nnnnnn com 是文本区域!
  • 只需添加一个迭代并使用 "comment_" 。 $i。通过这个,你可以拥有带有数字的 id。然后在使用 AJAX 之前,将所有提交的表单分组并发送。或者发送多个 AJAX 请求(但我不推荐)。或者通过php处理表单。
  • “我在哪里使用相同的 id?” - 我以为您正在使用 php while 循环创建该结构的多种形式。这不是你在做什么吗?

标签: php ajax jquery ajaxform


【解决方案1】:

你可以像这样使用类名:

$(".commentFiled").ajaxForm();

然后是这样的空字符串:

$(this).children('#com').val('');

【讨论】:

  • 我不是要清空值!我说的是第二篇文章,如果输入评论会刷新页面,ajax只提交一次!!!
  • 因为你有 $("#comment").ajaxForm
  • 好的,我尝试使用 $(".commentFiled").ajaxForm();现在,当我发表评论时,它不会将其添加到当前帖子中。它实际上将它添加到第一个。直到我刷新页面。
  • 你也有多个目标吗?喜欢#wtf?如果你有,你应该改变这一行: $(this).children('#wtf')
  • 您能否理解,ajaxform 完美地工作包括清除值和模糊它。它仅适用于第一个 POST。当我转到第二篇文章时,它不使用 ajaxForm 而是使用 action="...php" 当我从 #comment 更改为 ('.commentFiled') 时它可以工作,但它在另一篇文章中发布了它。这是第一个。 !
【解决方案2】:
<form class="commentFiled"  method='post' name="comment"  action="func/post_comment.php" >
<input  required type="text"  name="com" placeholder="Write a comment..." class="commentTextField">
<input type="hidden" name="p" value="<?php echo $disid ?>"/>
</form>

$(document).ready(function(){
    $(".commentFiled").each(function(frm){
        var frm = $(this);
        frm.ajaxForm({
            target: frm, 
            success: function() { 
                frm.find('input[name="com"]').val('').blur();
            }
        });
    });
});

ID 是唯一的。 jQuery 选择器只会使用找到的第一个。要使用多个表单,请将您的 ajaxForm 插件附加到每个表单,然后相对于该表单工作。我使用each() 集合回调来单独处理每个表单。

【讨论】:

  • 你的工作很完美。但它会获取显示的其他 cmets 并复制它们。而不是frm,我想使用'#wtf',如果这样做会起作用,但评论将发布到第一个帖子。有什么想法吗?
  • 如果您更新您的问题以便我可以看到#wtf 的位置,那么我会修正我的答案。
  • 就在表单之前。在这里我在页面刷新时显示 cmets。
  • 并且还包含与 post_comment.php 相同的 html 代码。它只是为了刷新目的。
  • 也许你只需要一个内部目标。 &lt;div class="timeComments"&gt; &lt;?php include("func/after_refresh.php");?&gt; &lt;div id="wtf"&gt;&lt;/div&gt;&lt;/div&gt;
猜你喜欢
  • 2016-06-04
  • 2018-06-16
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
  • 2016-02-29
  • 2013-12-13
  • 1970-01-01
  • 2020-05-11
相关资源
最近更新 更多