首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >删除输入字段的jQuery问题

删除输入字段的jQuery问题
EN

Stack Overflow用户
提问于 2019-01-03 20:51:38
回答 1查看 134关注 0票数 1

我在点击add的时候试图添加一个输入字段,点击delete click的时候应该把它移除。

这是JS Bin链接:JS issue with deletion

代码语言:javascript
复制
var newTextBoxDiv;
var rowCount = 0;
var counter = 1;
var delCounter = 1;
$(document).ready(function() {
    $(document).on('focus', '.txtFocus', function() {
        $(this).next('.clearContent').hide()
    });
    $(document).on('focusout', '.txtFocus', function() {
        $('.clearContent').show()
    })
});
    
function addTags(obj) {
    var newTextBoxDiv = '<div class="col-md-4 TextBoxMainDiv"><div style=""><div class="input-group" id="" style="width: 40%;margin: 0;padding: 0;padding: 2px;float:left;width:80%;"><input type="text" name="textbox' + counter + '" id="textbox' + counter + '" value=""  class="txtFocus" required  placeholder="Add Tag"   autocomplete="false" style="width: 100%" ><span class="clearContent"><a href="#" onClick="deleteTag(this);"><i class="fas fa-times"></i></a></span> </div><div style="width: 15%;display: inline-block;text-align:right;"><span id="addMore" onClick="addTags(this);"><a href="#"><i class="fas fa-plus-square"></i></a></span></div></div></div>';
    $(obj).hide();
    $("#tagElement").append(newTextBoxDiv);
    $('.txtFocus').focus();
    counter++;
    if (counter == 1) {
        $(obj).show()
    }
}
    
function deleteTag(obj) {
    $(obj).closest('.TextBoxMainDiv').last().find('#addMore').show();
    $(obj).closest('.TextBoxMainDiv').last().find('#addMore').css('display', 'block');
    $(obj).closest('.TextBoxMainDiv').remove();
    counter--;
    if (counter == 1) {
        $('#addMore').show()
    }
}
代码语言:javascript
复制
<div class="row">
    <div id="tagElement">
        <div>&nbsp;</div>
        <div class="col-md-4 TextBoxMainDiv">
            <div style="">
                <div class="input-group" id="" style="width: 40%;margin: 0;padding: 0;padding: 2px;float:left;width:80%;">
                    <input type="text" class="txtFocus" required placeholder="Add Tag" id="textBox" autocomplete="false" autofocus="autofocus" style="width: 100%">
                    <span class="clearContent">
                        <a href="#" onClick="deleteTag(this);">Add</a>
                    </span>
                </div>
                <div style="width: 15%;display: inline-block;text-align:right;">
                    <span id="addMore" onClick="addTags(this);">
                        <a href="#">cancel</a>
                    </span>
                </div>
            </div>
        </div>
    </div>
 </div>
 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
 <script src="https://code.jquery.com/jquery-3.1.0.js"></script>

我设法正确地添加了输入字段,但在删除它们时遇到了问题。它们似乎是随机删除的。

EN

回答 1

Stack Overflow用户

发布于 2019-01-03 21:43:22

我认为您的代码的逻辑是有效的,但是,用于添加和删除输入的图标并未呈现。

您可以使用以下内容替换您的newTextBoxDiv

代码语言:javascript
复制
var newTextBoxDiv = `
    <div class="col-md-4 TextBoxMainDiv">
        <div style="">
            <div class="input-group" id="" style="width: 40%;margin: 0;padding: 0;padding: 2px; float:left; width:80%;">
                <input type="text" name="textbox${counter}" id="textbox${counter}" value="" class="txtFocus" required placeholder="Add Tag" autocomplete="false" style="width: 100%" >
                <span class="clearContent">
                    <a href="#" onClick="deleteTag(this);">Delete<i class="fas fa-times"></i></a>
                </span>
            </div>
        <div style="width: 15%;display: inline-block;text-align:right;">
            <span id="addMore" onClick="addTags(this);">
                <a href="#">Add</a>
            </span>
        </div>
    </div>`;

请注意,我在标记之间添加了单词"Add“和"Delete”,以便您可以单击某些内容

此外,我认为您需要在初始HTML中交换"Add“和"Cancel”以传达更清晰的信息,因为它们现在做的是相反的事情。

另一个需要解决的问题是用class="addMore"替换id="addMore"

<span class="addMore" onClick="addTags(this);">

因为id应该是唯一的。然而,在您的代码中,当您追加新元素时,您添加了具有重复id的新元素,这使得jquery的选择器不会选择您想要的元素。

在用类替换id之后,您还需要更改deleteTag函数,以选择最后一个"addMore“跨度并显示它。

代码语言:javascript
复制
function deleteTag(obj) {
    $(obj).closest('.TextBoxMainDiv').last().find('.addMore').show();
    $(obj).closest('.TextBoxMainDiv').last().find('.addMore').css('display', 'block');
    $(obj).closest('.TextBoxMainDiv').remove();
    counter--;
    $('.addMore').last().show();
}

对于布局,您需要使用css来完成此操作,移除float并将div标记设置为适当的宽度和display: inline-block。我建议你使用一个单独的css文件来设置元素的样式,而不是内联。

代码语言:javascript
复制
function deleteTodo() {
    $(this).parent().remove();
}

function addTodo() {
    var inputTemplate =
        '<div class="todo-input-wrapper">' +
            '<input class="todo-input" type="text" placeholder="Add Tag" />' +
            '<button class="delete-button">Delete</button>' +
        '</div>';
    $('.todo-wrapper').append(inputTemplate);
    $('.delete-button').last().on('click', deleteTodo);
    $('.todo-input').last().focus();
}

$(document).ready(function () {
    $('.delete-button').on('click', deleteTodo);
    $('.add-button').on('click', addTodo);
});
代码语言:javascript
复制
.todo-wrapper {
    display: inline-block;
    width: max-content;
    font-size: 0;
}

.todo-input-wrapper {
    margin: 10px;
}
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="todo-wrapper">
    <div class="todo-input-wrapper">
        <input class="todo-input" type="text" placeholder="Add Tag" />
        <button class="delete-button">Delete</button>
    </div>
</div>
<button class="add-button">Add</button>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54022675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档