使用 JavaScript 从 DOM 中删除表单

Posted

技术标签:

【中文标题】使用 JavaScript 从 DOM 中删除表单【英文标题】:Remove form from DOM using JavaScript 【发布时间】:2017-11-14 08:50:30 【问题描述】:

我有三个单选按钮。点击时每个单选按钮都有一个独立的表单出现。当我单击单选按钮时,我需要从 DOM 中删除表单。 还有第三个尚未准备好。当我单击第一个单选按钮时,仅显示其表单,其他两个从 DOM 中删除。其他的也一样。 我对 javascript 不太了解。

html

   <div class="page-header">
    <h1>Backtesting% if form.instance.pk %: form.instance.title % endif %</h1>
    </div> 

   <div class="row">
    <div class='col-md-9'>
               <form action="% url "backtest" %" method='POST' role='form' id='form'>
                  % csrf_token %

                <div id="tabs">


                 <input type="radio" name="tabs" value="first" id="toggle-tab1"  checked="checked" />
                 <label for="toggle-tab1">Long</label>

                 <input type="radio" name="tabs" value="second" id="toggle-tab2"     />
                 <label for="toggle-tab2">Short</label>

                 <input type="radio" name="tabs" value="third" id="toggle-tab3"   />
                 <label for="toggle-tab3">Long and Short</label>
                 <div id="tab1" class="tab"  >



                     % include 'tags/parameters_form.html' %
                         <br />


                            % if user.is_authenticated %
                            <input type='submit' id='run' value='Run' class='btn btn-default'>

                            % if user.profile.is_active %
                    Name:  form.title  <input type='submit' name='save' value='Save' class='btn btn-default'>
                % else %
                    <p>
                    Expired account! you need to reactivate in order to save parameters.
                    </p>
                % endif %
            % else %
                                     Please <a href="% url 'auth_login' %">login</a> in order to Run backtesting!
                 </br>
                 Our system needs your email in order to notify you once one or more of your simulations are done. This is a safer way for you to keep track of your previous simulations (/jobs).   

                              % endif %                        




                 </div>
                 <div id="tab2" class="tab"  >

                   % include 'tags/parameters_backtest_form.html' %
                            <br />


                            % if user.is_authenticated %
                            <input type='submit' id='run' value='Run' class='btn btn-default'>

                % if user.profile.is_active %
                    Name:  form.title  <input type='submit' name='save' value='Save' class='btn btn-default'>
                % else %
                    <p>
                    Expired account! you need to reactivate in order to save parameters.
                    </p>
                % endif %
            % else %
                                     Please <a href="% url 'auth_login' %">login</a> in order to Run backtesting!
                 </br>
                 Our system needs your email in order to notify you once one or more of your simulations are done. This is a safer way for you to keep track of your previous simulations (/jobs).   

                              % endif %






                 </div> 
                    </div> 
           </form>

         </div> 

     </div>
% endblock %

【问题讨论】:

你有没有尝试过任何JS?展示你的尝试。可能你需要类似var radio = document.getElementById('toggle-tab3'); radio.onclick = function() /* remove elements from DOM */; 或使用jQuery $('#toggle-tab3').on('click', function() /*remove elements from DOM*/); 你可能需要学习基本的javascript 教程(可能是javascript.info,或w3schools.com/Js) 【参考方案1】:
    function onclick(e)
        var tab = document.getElementById('toggle-tab1');
        tab.style.visibility = "hidden";
    

button1.addEventListener('click', onclick(e))

这应该可以解决问题!

【讨论】:

【参考方案2】:

问题已解决:

                 <input type="radio" name="tabs"  value="first" id="toggle-tab1"  % if strategy == 'l' % checked="checked"% endif % />
                 <label for="toggle-tab1">Long</label>

                 <input type="radio" name="tabs"   value="second" id="toggle-tab2" % if strategy == 's' % checked="checked" % endif %  />
                 <label for="toggle-tab2">Short</label>



                 <div id="tab1" class="tab"  >

        <form action="% url "backtest" %" method='POST' role='form' id='form'>
             % csrf_token %
             <input type="hidden" name="tabs"  value="first" id="toggle-tab1"  checked="checked" />

【讨论】:

【参考方案3】:
<form action="% url "backtest" %" method='POST' role='form' id='form'>
                  % csrf_token %

                <div id="tabs">


                 <input type="radio" name="tabs" value="first" id="toggle-tab1"  checked="checked" />
                 <label for="toggle-tab1">Long</label>

                 <input type="radio" name="tabs" value="second" id="toggle-tab2"     />
                 <label for="toggle-tab2">Short</label>

                 <input type="radio" name="tabs" value="third" id="toggle-tab3"   />
                 <label for="toggle-tab3">Long and Short</label>
                 <div id="tab1" class="tab"  >

                    <!-- first form will show when page load -->
                     <fieldset id="first" class="toggle">
                     % include 'tags/parameters_form.html' %
                     </fieldset>
                    <fieldset disabled id="second" class="toggle">
                          % include 'tags/parameters_form.html' %
                     </fieldset>
                     <fieldset disabled id="third" class="toggle">
                         % include 'tags/parameters_form.html' %
                     </fieldset>
      .....

Js

$('[name="tabs"]').click(function()
  $('.toggle').prop("disabled", true);
  var val = $(this).val()
  $('#'+val).prop('disabled', false);
);

当您在 fieldset 中添加 disabled attr 时,fieldset 内部输入字段数据将不会在表单中发布,这意味着如果 fieldset 标签具有 disabled 属性,该字段将无法工作。因此,您可以在每个条件中显示特定的表单,并在 fieldset 标记中添加属性禁用,内部字段数据不会发布。

了解https://www.w3schools.com/tags/att_fieldset_disabled.asp

【讨论】:

Neeraj 你的代码以另一种形式对我有用.. 但现在我需要在单击单选按钮时完全删除旧形式。你有什么想法吗? 您可以将表单html代码保存在js变量中,并添加一些带条件的逻辑。如果选中radio,则将可变html代码呈现到页面中,如果未选中,则从页面中删除html代码。【参考方案4】:

如果您无法更改 DOM 元素并添加一个类,我的答案是为每个按钮附加一个事件侦听器:

'use strict';    
var button1 = document.getElementById('toggle-tab1'),
    button2 = document.getElementById('toggle-tab2'),
    button3 = document.getElementById('toggle-tab3');

button1.addEventListener('click', function () 
   // Code that takes it away (hide DOM elements or whatever you need)
);

另一方面,更好的方法是向所有无线电输入添加一个函数,然后根据输入无线电的 ID 或值,您可以更改行为:

<input type="radio" name="tabs" onclick="handleClick(this)" value="first" id="toggle-tab1" checked="checked" />

那么你就可以有一个函数了:

function handleClick (e) 
    if (e.id == 'toggle-tab1') 
        // Code that takes it away (hide DOM elements or whatever you need)
    
;

【讨论】:

以上是关于使用 JavaScript 从 DOM 中删除表单的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Javascript DOM 从具有多个表单的页面获取具有输入类型密码的表单?

JavaScript(Dom对象的操作)

JavaScript&jQuery.DOM事件

JavaScript DOM API的使用

08.16号 dom 节点的创建 和删除DOM表单与非表单取值的方法 和操作属性与操作样式

表单/JavaScript 无法在 IE 11 上运行并出现错误 DOM7011