【问题标题】:Remove button not work when changing the structure更改结构时删除按钮不起作用
【发布时间】:2014-11-26 14:48:43
【问题描述】:

我正在动态添加按钮,它可以通过这段代码完美添加,当我想删除用户通过单击添加更多按钮创建的文本框时效果很好。

在点击事件中完美添加和删除按钮的代码。

这里是 jquery 脚本!。

$(document).ready(function() {

    var MaxInputs       = 8; //maximum input boxes allowed
    var InputsWrapper   = $("#InputsWrapper"); //Input boxes wrapper ID
    var AddButton       = $("#AddMoreFileBox"); //Add button ID

    var x = InputsWrapper.length; //initlal text box count
    var FieldCount=1; //to keep track of text box added

    $(AddButton).click(function (e)  //on add input button click
    {
        if(x <= MaxInputs) //max input box allowed
        {
            FieldCount++; //text box added increment
            //add input box
            $(InputsWrapper).append('<div class="controls"><input type="text" class="form-control" name="sub-category-name[]" required/><a href="#" class="removeclass">&times;</a></div>');
            x++; //text box increment
        }
        return false;
    });

    $("body").on("click",".removeclass", function(e){ //user click on remove text
        if( x > 1 ) {
            $(this).parent('div').remove(); //remove text box
            x--; //decrement textbox
        }
        return false;
    }) 
});

这里是 Html。

<div class="form-group" id="InputsWrapper">
    <label for="sub-category-name">Sub Category Name </label>
    <div class="controls">
        <input type="text" class="form-control" id="typeahead"  name="sub-category-name[]" required>
        <a href="#" id="AddMoreFileBox" class="btn btn-info">Add More Field</a>
    </div>
</div>

但是当我稍微更改代码结构时,用户可以添加文本框但无法删除动态添加的文本框。
这是 Html 代码。

<div class="form-group" id="InputsWrapper">
    <div class="input-group"><input type="text" class="form-control">
        <span class="input-group-btn"> <a href="#" id="AddMoreFileBox"><button class="btn btn-default" type="button">+</button></a> </span>
    </div>

</div>

这是脚本。

$(document).ready(function() {

    var MaxInputs       = 8; //maximum input boxes allowed
    var InputsWrapper   = $("#InputsWrapper"); //Input boxes wrapper ID
    var AddButton       = $("#AddMoreFileBox"); //Add button ID

    var x = InputsWrapper.length; //initlal text box count
    var FieldCount=1; //to keep track of text box added

    $(AddButton).click(function (e)  //on add input button click
    {
        if(x <= MaxInputs) //max input box allowed
        {
            FieldCount++; //text box added increment
            //add input box
            $(InputsWrapper).append('<div class="input-group"><input type="text" class="form-control"><span class="input-group-btn"> <a href="#" class="btn btn-default removeclass">X</a></span</div>');
            x++; //text box increment
        }
        return false;
    });

    $("body").on("click",".removeclass", function(e){ //user click on remove text
        if( x > 1 ) {
            $(this).parent('div').remove(); //remove text box
            x--; //decrement textbox
        }
        return false;
    }) 
});

【问题讨论】:

  • 创建一个jsfiddle.net - 注意在fiddle中使用“head”而不是“onload”
  • 并验证您的 HTML。 A 不应该包装一个按钮

标签: javascript jquery html


【解决方案1】:

你需要通过标签和/或类名来定位你的父母:

$(this).closest("div").remove(); // walk up the DOM until the nearest DIV   

$(this).closest("div.form-group").remove(); // walk up to nearest div.form-group 

如果我得到了错误的容器,请将 form-group 更改为要删除的容器的类

【讨论】:

  • 非常感谢您的努力,但我的问题通过 Fenex 的回答得到了解决
  • 不,它没有。它通过对一个非常错误的答案的评论得到解决,如果您再次更改结构,则需要修改您的代码,而我的建议将有效,直到您更改容器的类或标签类型
  • 兄弟我也使用了你的结构,它的作用是删除所有属于表单组的文本框
  • 我看不到你需要删除的类是什么,因为那里有太多的 html。更改类名以反映您要删除的容器
  • 非常高兴。祝你有美好的一天
【解决方案2】:

您需要: $(this).parent().parent().remove();

在第二个清单中,您更改了 HTML 结构,但忘记了 JS。

您的 HTML 是:

div
    a.removeclass

您将侦听器添加到 a.removeclass,然后您沿着 DOM 树走一遍:

$(this).parent('div').remove();

您现在的 HTML:

div
    span
        a.removeclass

现在,如果你想移除 div,你需要爬树两次,但是一次!

【讨论】:

  • 是的,我错了。我没有注意添加最后一个监听器。
  • 唯一的错误是第二个代码是用户无法删除动态添加的文本框,我也在试图解决这个问题,但问题是别的
  • $(this).parent('div').remove(); 更改为 $(this).parent().parent().remove();
  • 开始工作请编辑你的答案并解释它虽然它对我有用,但还有其他人也可以从你的答案中得到帮助
  • 我正在更新...@Aitazaz Khan,并且,在第二个脚本中另一个错误:您添加输入框的位置:**>**
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 2017-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多