HTML表单和javascript---在同一个表格中显示不同的表单

Posted

技术标签:

【中文标题】HTML表单和javascript---在同一个表格中显示不同的表单【英文标题】:HTML form and javascript---show different form in same table 【发布时间】:2015-06-25 22:32:22 【问题描述】:

我在一个 html 表格中有 4 个表单,使用 4 个按钮来调用表单。

HTML:

<div id="myAccordion">
  <table id="edit"
         class="table table-striped table-bordered table-hover table-condensed table-nonfluid1 thumbnail">
    <tbody>
      <tr>
        <td width=50%>
          <button type="button" class="btn btn-info btn-lg" data-parent="#myAccordion"
                  id="cpass"
                  onclick="document.getElementById('col').style.display = 'inline'">form1
          </button>
        </td>
        <td width=50%>
          <button type="button" class="btn btn-primary btn-lg" data-parent="#myAccordion"
                  id="cinfo"
                  onclick="document.getElementById('col').style.display = 'inline'">form2
          </button>
        </td>
      </tr>
      <tr>
        <td width=50%>
          <button type="button" class="btn btn-info btn-lg" data-parent="#myAccordion"
                  id="cmail"
                  onclick="document.getElementById('col').style.display = 'inline'">form3
          </button>
        </td>
        <td width=50%>
          <button type="button" class="btn btn-primary btn-lg" data-parent="#myAccordion"
                  id="cplace"
                  onclick="document.getElementById('col').style.display = 'inline'">form4
          </button>
        </td>
      <tr>
        <td colspan="2" style="display:none;" id="col">
          <div id="form1" class="collapse">
            <form method="POST" action="updatepassc.php" novalidate="novalidate" id="1">
              <div class="form-group">
                <label for="oldpassword" class="control-label ">1:</label>
                <input type="password" class="form-control" id="oldpassword"
                       name="oldpassword">
                <span class="help-block"></span>
              </div>
              <div class="form-group">
                <label for="newpassword" class="control-label ">2:</label>
                <input type="password" class="form-control" id="newpassword"
                       name="newpassword">
                <span class="help-block"></span>
              </div>
              <div class="form-group">
                <label for="newpassword1" class="control-label ">3:</label>
                <input type="password" class="form-control" id="newpassword1"
                       name="newpassword1">
                <span class="help-block"></span>
              </div>
              <button type="submit" class="btn btn-success btn-block">yes</button>
            </form>
          </div>
          <div id="form2" class="collapse">
            .
            <form method="POST" action="updateinfo.php" novalidate="novalidate">
              <div class="form-group">
                <label for="newinfo" class="control-label ">2</label>
                <textarea class="form-control" rows="3" id="newinfo"
                          name="newinfo">></textarea>
                <span class="help-block"></span>
              </div>
              <button type="submit" class="btn btn-success btn-block">yes</button>
            </form>
          </div>

          <div id="form3" class="collapse">
            .
            <form method="POST" action="updateinfo.php" novalidate="novalidate">
              <div class="form-group">
                <label for="newinfo" class="control-label ">3</label>
                <textarea class="form-control" rows="3" id="newinfo"
                          name="newinfo">></textarea>
                <span class="help-block"></span>
              </div>
              <button type="submit" class="btn btn-success btn-block">3</button>
            </form>
          </div>
          <div id="form4" class="collapse">
            .
            <form method="POST" action="updateinfo.php" novalidate="novalidate">
              <div class="form-group">
                <label for="newinfo" class="control-label ">4</label>
                <textarea class="form-control" rows="3" id="newinfo"
                          name="newinfo"></textarea>
                <span class="help-block"></span>
              </div>
              <button type="submit" class="btn btn-success btn-block">yes</button>
            </form>
          </div>
        </td>
      </tr>
    </tbody>
  </table>
</div>

我想在 (td id="col") 中显示不同的表单,但它有一个错误,它会同时显示两个表单。我想要如果我点击一个按钮,将打开一个表单,另一个表单将关闭。例如,如果表单 1 打开,则表单 2、3、4 将关闭

这是javascript代码:

<script type="text/javascript">
$(document).ready(function () 
    $('#cpass').click(function () 
        $('#form1').collapse('show');
        if ($('#form2').is(':visible'))
            $('#form2').collapse('hide');
    );
    $('#cinfo').click(function () 
        $('#form2').collapse('show');
        if ($('#form1').is(':visible'))
            $('#form1').collapse('hide');
    );
    $('#cmail').click(function () 
        $('#form3').collapse('show');
        if ($('#form4').is(':visible'))
            $('#form4').collapse('hide');
    );
    $('#cplace').click(function () 
        $('#form4').collapse('show');
        if ($('#form3').is(':visible'))
            $('#form3').collapse('hide');
    );
);

jsfiddle

我该如何解决这个问题?

【问题讨论】:

不要将&lt;script&gt; 放在 jsfiddle 的 Javascript 面板中,它会自动为您完成。 当我修复它时它可以工作:jsfiddle.net/barmar/oe8035os/1 顺便说一句:***.com/questions/359732/… 你为什么同时使用内联onclick属性和Javascript.click()函数? 为什么需要检查?把它们全部关闭。如果它已经关闭,什么都不会发生。 【参考方案1】:

用 slideUp 和 slideDown 更新了 jQuery 代码。它一次只打开一个表格。还为所有表单添加一个通用的有意义的类名,这样您就可以在不显式使用多个 id/class 的情况下调用 hide/sildeUp

$(document).ready(function () 
    $('#cpass').click(function () 
        $('#form1').slideDown();
        $('#form2,#form3,#form4').slideUp();
    );
    $('#cinfo').click(function () 
        $('#form2').slideDown();
        $('#form1,#form3,#form4').slideUp();
    );
    $('#cmail').click(function () 
        $('#form3').slideDown();
        $('#form1,#form2,#form4').slideUp();
    );
    $('#cplace').click(function () 
        $('#form4').slideDown();
        $('#form1,#form2,#form3').slideUp();
    );
);

编辑:删除内联 onclick 和 css 以保持 html 干净

fiddle

【讨论】:

这是一种更简洁的方法。【参考方案2】:

虽然有一些方法可以简化你的 JS 代码,但我会保留一般格式并稍微修改一下以达到效果。请注意,您可以使用逗号来选择多个 div 对象。

您可以通过添加类似 rkamath 建议的动画来使代码更简洁。他提供了幻灯片效果。为了您的方便,这里还有一个淡入淡出效果:

$(document).ready(function () 
$('#cpass').click(function () 
    $('#form2,#form3,#form4').hide();
    $('#form1').fadeIn();

);
$('#cinfo').click(function () 
    $('#form1,#form3,#form4').hide();
    $('#form2').fadeIn(); 

);
$('#cmail').click(function () 
    $('#form4,#form2,#form1').hide();
    $('#form3').fadeIn();

);
$('#cplace').click(function () 
    $('#form3,#form2,#form1').hide();
    $('#form4').fadeIn();

);
);

这是fiddle。

如果您真的想在此处保留代码的一般结构,则可以:

$('#cpass').click(function () 
    $('#form1').collapse('show');
    if ($('#form2,#form3,#form4').is(':visible'))   $('#form2,#form3,#form4').collapse('hide');
);

$('#cinfo').click(function () 
    $('#form2').collapse('show');
    if ($('#form1,#form3,#form4').is(':visible'))  
    $('#form1,#form3,#form4').collapse('hide');
);

$('#cmail').click(function () 
    $('#form3').collapse('show');
    if ($('#form4,#form2,#form1').is(':visible')) 
    $('#form4,#form2,#form1').collapse('hide');
);

$('#cplace').click(function () 
    $('#form4').collapse('show');
    if ($('#form3,#form2,#form1').is(':visible'))  
    $('#form3,#form2,#form1').collapse('hide');
);

这里是fiddle。

【讨论】:

当我在我的网站中使用 hide() 时,表单无法显示,只显示一个空 它在小提琴上工作得很好。如果它对您不起作用,那么只需使用我发布的第二个选项。根据您在最初问题中提供的代码,第二个选项应该适合您。 如果我使用第二个选项只能工作一次。 使用更新后的代码再次尝试第二个选项。第二次是指第一次提交后就不行了吗? 如果我点击另一个表格,它将显示表格中的所有表格 【参考方案3】:

不需要第 1 行和第 24 到 26 行(正在犯错误)

    );

Updated Fiddle

【讨论】:

他的小提琴中的那些行没有问题。错误是因为&lt;script&gt; 行。他发布了一个没有那个的新小提琴链接。 是的,我意识到这一点。我打的是 23 而不是 24。

以上是关于HTML表单和javascript---在同一个表格中显示不同的表单的主要内容,如果未能解决你的问题,请参考以下文章

什么是表单验证?

通过 JavaScript 强制 HTML 表单验证

使用Javascript将文本从表单放入表中,当我单击按钮时它会消失

HTML表单和javascript---在同一个表格中显示不同的表单

使用 PHP 和 JavaScript 动态搜索 SQL 表并在 HTML 上显示

如何将 HTML 表单中的数据保存到 WordPress 中的数据库表中?