【问题标题】:HTML Checkbox "onclick" Create Button issueHTML复选框“onclick”创建按钮问题
【发布时间】:2021-10-01 16:41:56
【问题描述】:

所以我从复选框点击事件中有以下目标
1] 在指定的 div 中创建一个 id = 'id-of-checkbox'+'some-character-here' 的按钮
2]单击该特定按钮将删除该按钮以及与之相关的复选框
3] 如果用户想通过取消选中复选框来删除指定 div 中的按钮,则应该这样做
4] 如果用户再次选中复选框按钮,则应在指定的 div 中创建

现在我已经实现了前 3 个目标,但我对第 4 个目标有疑问,即
如果我在取消选中后再次单击复选框,则不会创建按钮并且控制台不会
返回与之相关的任何错误..请帮助

这是我的 HTML 代码

<div id="filterDropArea container">
  <input type="checkbox" name="priceFilter"  id="priceFilter" class="btn" onclick="updateValue(this.id,this.name)">
  Price Filter
</div>

<div id="DropArea">
  
</div>

这是我的 Javascript 代码


var objTo = document.getElementById('DropArea');
var checked = ""

function updateValue(id,name)
{
  if(document.getElementById(id).checked)
    {
         checked='yes'
    }
  else if(!document.getElementById(id).checked)
    {
      checked='no'
    }
  
  if(checked=='yes')
    {
      addButton(id,name);
    }
  else if(checked=='no')
    {
      removeButton(id,name);
    }
  
}

function addButton(id,name)
{
  var nameOfButton = name+'X';
var idofButton = id+'11';
var btn = document.createElement("BUTTON");
btn.innerHTML=nameOfButton;
btn.setAttribute("class","btnCancel");
btn.setAttribute("id",idofButton);
btn.setAttribute("onclick","someMsg(this.id)")

objTo.appendChild(btn);

}

function removeButton(id,name)
{
       
var idofButton = id+'11'
if(document.getElementById('DropArea').contains(document.getElementById(idofButton)))
{
document.getElementById('DropArea').remove(document.getElementById(idofButton));
console.log('Button Removed');
      
    }
}
function someMsg(id)
{
var name = id.substring(0,id.length-2);
document.getElementById(id).remove();
document.getElementById(name).checked=false;
console.log('Deleted');
}




【问题讨论】:

    标签: javascript html checkbox


    【解决方案1】:

    实现相同结果的另一种方法:

    const dropArea = document.querySelector("#dropArea");
    const checkbox = document.querySelector("#priceFilter");
    
    checkbox.addEventListener("change", function(e) {
      if (this.checked) {
        const btn = createSpecificButton();
    
        dropArea.appendChild(btn);
      } else {
        const btn = dropArea.querySelector("button");
    
        dropArea.removeChild(btn);
      }
    });
    
    const createSpecificButton = () => {
      const btn = document.createElement("button");
    
      btn.innerText = "Click Here";
    
      btn.addEventListener("click", function(e) {
        checkbox.checked = false;
    
        this.remove();
      });
    
      return btn;
    };
    <div id="filterDropArea container">
      <input type="checkbox" name="priceFilter" id="priceFilter" /> Price Filter
    </div>
    
    <div id="dropArea"></div>

    【讨论】:

    • 非常感谢,这是更清洁、更高效的实现方式,你真棒?
    【解决方案2】:

    Element.remove()没有任何参数,所以当你通过你的方式调用时,它会删除DropArea元素(包括子元素,如idofButton)。

    解决方案:更改以下行

    document.getElementById('DropArea').remove(document.getElementById(idofButton));

    收件人

    document.getElementById(idofButton).remove();

    var objTo = document.getElementById('DropArea');
    var checked = ""
    
    function updateValue(id, name) {
      if (document.getElementById(id).checked) {
        checked = 'yes'
      } else if (!document.getElementById(id).checked) {
        checked = 'no'
      }
    
      if (checked == 'yes') {
        addButton(id, name);
      } else if (checked == 'no') {
        removeButton(id, name);
      }
    
    }
    
    function addButton(id, name) {
      var nameOfButton = name + 'X';
      var idofButton = id + '11';
      var btn = document.createElement("BUTTON");
      btn.innerHTML = nameOfButton;
      btn.setAttribute("class", "btnCancel");
      btn.setAttribute("id", idofButton);
      btn.setAttribute("onclick", "someMsg(this.id)")
    
      objTo.appendChild(btn);
    
    }
    
    function removeButton(id, name) {
    
      var idofButton = id + '11'
      if (document.getElementById('DropArea').contains(document.getElementById(idofButton))) {
        document.getElementById(idofButton).remove();
        console.log('Button Removed');
    
      }
    }
    
    function someMsg(id) {
      var name = id.substring(0, id.length - 2);
      document.getElementById(id).remove();
      document.getElementById(name).checked = false;
      console.log('Deleted');
    }
    <div id="filterDropArea container">
      <input type="checkbox" name="priceFilter" id="priceFilter" class="btn" onclick="updateValue(this.id,this.name)"> Price Filter
    </div>
    
    <div id="DropArea">
    
    </div>

    【讨论】:

    • 非常感谢,我没有推断出这就是在这个问题上花费大量时间的原因..
    猜你喜欢
    • 1970-01-01
    • 2013-11-18
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 2013-03-09
    相关资源
    最近更新 更多