【问题标题】:How to show element in table row if I have multiple forms如果我有多个表单,如何在表格行中显示元素
【发布时间】:2019-03-21 07:19:18
【问题描述】:

我有一个包含多行的表,并且在每一行中我都有一个 id="saveComment" 的表单。 (目标:对于我要添加评论的每一行)

我使用 AJAX 保存数据。 当我添加评论时,我成功地将数据保存在数据库中,以便根据需要在表中添加单个评论。但我还想在当前提交的表单所在的行中添加一个图像元素或显示隐藏的图像或一些文本! (添加了评论 - 显示显示该行有评论的图像或成功文本)。理想情况下,当评论为空时隐藏图像/文本

HTML:

<table>
    <tr>
        <td id="success"><span id="successmessage" style="display:none;">OK</span></td>
        <td>
            <form method="post" id="saveComment">
                <!-- some form data and submit button -->
            </form>
        </td>
    </tr>
</table>

AJAX:

<script>
    var frm = $("#saveComment");
        frm.submit(function (e) {
            e.preventDefault();
            $.ajax({
                type: frm.attr('method'),
                contentType: "application/json",
                crossDomain: true,
                async: true,
                url: 'test.cgi',
                data: $(this).serialize(),
                success: function (data) {
                    alert('Saved!');
                    $("#successmessage").show();
                    console.log('Submission was successful.');
                    console.log(data);
                },
                error: function (data) {
                    alert('Error!');
                    console.log('An error occurred.');
                    console.log(data);
                },
            });
        });
</script>

如果我在成功函数中添加 ajax 代码 $("#successmessage").show();我只在页面的第一个表单中显示消息,而不是当前提交的表单

如何仅在提交表单的地方显示/添加所需条目的图像或文本?

【问题讨论】:

  • 我能知道你到底想要什么吗?
  • @BathriNathan 我想更改一些元素,例如提交后使用jquery显示数据保存成功的消息。现在如果我提交表单 - 正常传输的 ajax 数据,但是例如$("#successmessage").show();在我的 jquery 部分代码中没有以当前提交的形式显示消息,而是以页面的第一种形式显示它
  • @BathriNathan 现在我找到了添加var id = $(this).attr("id")$("#successmessage_"+id).show(); 的解决方案(并将我的跨度更改为&lt;span id="successmessage_45600" - 45600 是一个唯一编号,等于我的表单ID)。但是这个解决方案似乎很难看
  • 请检查我的以下答案,它可能会帮助您理解代码的问题。我猜是这样。

标签: javascript jquery html ajax


【解决方案1】:

在success函数中,可以定位触发表单提交的元素。我假设有一个提交按钮。所以代码可以是这样的。

$(e.target).parents('tr').find('#successimageid').show();

此外,在一个页面中多次使用相同的 id 是一个错误的想法。 id 是唯一标识符,因此页面中应该只有一个。

【讨论】:

  • 嗨。谢谢。我是 JQuery 的菜鸟。如果我为每个表单添加唯一 ID,例如用户的 id,我的 jquery 部分代码应该如何更改?在这种情况下如何对显示图像或文本做同样的事情?
  • $('.form').on('submit', function(){ var id = $(this).attr('id'); $(id).html( text/image); }) 或类似的东西@Serg
  • @Ari 嗨。谢谢你的主意! $(id).html('Success!'); 不适合我。什么都没有出现。我为表单添加了唯一的 ID,另外还为我想在成功时显示的图像添加了唯一 ID,例如表单 id = #34567,图像 id = #success_34567。并且 show() 可以按我的需要工作 - 仅适用于提交的表单 (var id = $(this).attr("id"); $("#success_"+id).show();) 还有一个问题:这是为表单甚至为元素设置唯一 ID 的正常或标准解决方案吗?为什么您的解决方案不起作用?也许我应该使用 $(this) 但在我的案例中找不到示例
  • @Serg 对于您的用例,您可以只使用一个类而不是 id,一切都应该正常工作。并且不要忘记用点(。)更改#。
  • @Serg 为您的所有表单添加一个类 .form 并为每个表单添加一个唯一的 ID。您不需要为元素提供唯一 ID。您只需 $(id).parent().parent().find("#successmessage").show();
【解决方案2】:

嘿,这可能是您的问题,请不要对多个表单使用相同的 id,因为它是唯一的,如果您对多个表单或 div 使用相同的,那么只有第一个 div 或表单可以工作。请参考下面的示例,它将为您解释

$('#click').click(function() {
				//select all radio is now checked
        $('#event444').prop('checked', true);
        $('#reset').prop('checked', false);
});

$('#reset').click(function() {
//reset radio is now checked
				$('#click').prop('checked', false);
        $('#event444').prop('checked', false);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="a">
  please select any of the radio button
  <input  type="radio" id="click" value="energyRating">select all
  <input  type="radio" id="reset" value="energyRating">reset all
</div>

<div id="b">
  <input  type="checkbox" id="event444"  value="Bike1">I have a bike<br>
  <input  type="checkbox" id="event444" value="Car">I have a car <br>
<input  type="checkbox" id="event444" value="Bike">I have another bike<br>
  <input  type="checkbox" id="event444" value="Car">I have another car
</div>

使用类来覆盖代码id问题。检查下面的代码。

    $('.click').click(function() {
    				//select all radio is now checked
            $('.event444').prop('checked', true);
            $('.reset').prop('checked', false);
    });

    $('.reset').click(function() {
    //reset radio is now checked
    				$('.click').prop('checked', false);
            $('.event444').prop('checked', false);
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div id="a">
      please select any of the radio button
      <input  type="radio" class="click" value="energyRating">select all
      <input  type="radio" class="reset" value="energyRating">reset all
    </div>

    <div id="b">
      <input  type="checkbox" class="event444"  value="Bike1">I have a bike<br>
      <input  type="checkbox" class="event444" value="Car">I have a car <br>
    <input  type="checkbox" class="event444" value="Bike">I have another bike<br>
      <input  type="checkbox" class="event444" value="Car">I have another car
    </div>

【讨论】:

  • 我的英文太差了,不过好像可以给你解释一下。请参阅:您有 20 个带有 myform 类的表格。在每个&lt;form&gt;&lt;/form&gt; 标签中,您都有提交按钮和&lt;span style="display:none;"&gt;Success!&lt;/span&gt;。您有带有 ajax 请求的 jquery 代码。用户按下提交按钮,例如,20 号表单中的第 15 号。您将如何仅在该
    中显示带有成功消息的 ,用户单击提交的第 15 号表单?其他 应该保持不可见,因为用户没有在那里按下提交按钮。每个 和 是否可以没有唯一 ID?
  • 在您的第二个示例中,我可以选择所有复选框,也可以取消选择所有复选框。如果我在页面上使用类而不是唯一 ID,我会得到同样的结果。我认为,我的任务需要唯一的 ID。例如。 &lt;form id=15 method=post&gt;&lt;span style="display:none;" id='success_15'&gt;Success!&lt;/span&gt;&lt;/form&gt;
  • @Serg 如果你需要 id 然后为所有东西创建唯一的 id。并妥善处理。但是如果你有这么多的 div 或基本上,最好使用 class。您甚至可以根据类示例在选择器中处理带有索引的特定 div :$('event444').[0] - - 选择第一个元素
猜你喜欢
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 2018-04-02
  • 2015-04-30
  • 1970-01-01
  • 2017-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多