jquery - 一个一个删除下拉列表,同时添加
问题描述
这是一种逐个删除下拉列表的方法吗?
我正在使用 jquery 在 div 中创建和附加带有按钮的下拉列表,该按钮用于删除下拉列表。
要求:
- 能够一一删除下拉列表。
这是一个显示问题的片段:
$(document).ready(function() {
$("#btnAddItem").click(function(){
var text = $('#ddl_device_option').val();
if(text == "device_1"){
$('#dvTable').append('<font face="Arial" size="4"> </font> ');
$('#dvTable').append(text);
$('#dvTable').append(' <select id="test"> <option>1</option> <option>2</option><option>3</option><option>4</option><option>5</option><option>6</option><option>7</option> <option>8</option> </select> ');
var i = "1";
$('#dvTable').append('<input type="button" id='+ i +' value="x" class="btn btn-danger" >');
} else if(text == "device_2") {
$('#dvTable').append('<font face="Arial" size="4"> </font> ');
$('#dvTable').append(text);
$('#dvTable').append(' <select> <option id="1">1</option> <option>2</option><option>3</option><option>4</option><option>5</option><option>6</option><option>7</option> <option>8</option> </select> ');
var i = "2";
$('#dvTable').append('<input type="button" id='+ i +' value="x" class="btn btn-danger">');
} else if(text == "device_3"){
$('#dvTable').append('<font face="Arial" size="4"> </font> ');
$('#dvTable').append(text);
$('#dvTable').append(' <select> <option>1</option> <option>2</option><option>3</option><option>4</option><option>5</option><option>6</option><option>7</option> <option>8</option> </select> ');
var i = "3";
$('#dvTable').append('<input type="button" id='+ i +' value="x" class="btn btn-danger">');
}
});
});
$( "#dvTable" ).click(function() {
// alert("clicked");
$(this).remove(); // it will remove entire div
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="itemOptions" class="panel panel-info">
<div >
<font face="Arial" size="4" >Select Device:</font>
<select id="ddl_device_option">
<option id="1">device_1</option>
<option id="2">device_2</option>
<option id="3">device_3</option>
<option id="4">device_4</option>
<option id="5">device_5</option>
<option id="6">device_6</option>
<option id="7">device_7</option>
<option id="8">device_8</option>
<option id="9">device_9</option>
</select>
<input id = "btnAddItem" type="button" value="+" class="btn btn-warning">
</div>
</div>
<div id="dvTable">
</div>
解决方案
您的代码有两个问题。首先是您的点击事件在错误的元素上触发:
$( "#dvTable" ).click(function() {
// alert("clicked");
$(this).remove(); // it will remove entire div
});
这将导致任何点击#dvTable
删除。#dvTable
这显然不是你想要的。
但是,简单地将click
事件添加到#dvTable > input[type=button]
选择器将无法正常工作。你构建新元素的方式意味着你的动态 HTML 是错误的。
我已将您的 HTML 输出修改为:
var newElement;
newElement = '<div>';
newElement += '<font face="Arial" size="4"> ' + text + '</font>'
newElement += '<select id="test"> <option>1</option> <option>2</option><option>3</option><option>4</option><option>5</option><option>6</option><option>7</option> <option>8</option> </select>'
var i = "1";
newElement += '<input type="button" id='+ i +' value="x" class="btn btn-danger" >';
newElement += '</div>';
$('#dvTable').append(newElement);
这将为新元素构建文本并将其包装在div
. 然后它一次将整个元素添加到#dvTable
.
然后删除您添加的项目变得更加容易。然后您的代码变为:
$(document).on('click', '#dvTable > div > select + input[type=button]', function() {
$(this).parent().remove();
});
本质上,当您单击under下的任何按钮时,它会删除父元素,即. 这会删除您之前添加的所有动态内容,而不仅仅是其中的一部分。div
#dvTable
div
查看以下显示此内容的工作片段:
$(document).ready(function() {
$("#btnAddItem").click(function(){
var text = $('#ddl_device_option').val();
if(text == "device_1"){
var newElement;
newElement = '<div>';
newElement += '<font face="Arial" size="4"> ' + text + '</font>'
newElement += '<select id="test"> <option>1</option> <option>2</option><option>3</option><option>4</option><option>5</option><option>6</option><option>7</option> <option>8</option> </select>'
var i = "1";
newElement += '<input type="button" id='+ i +' value="x" class="btn btn-danger" >';
newElement += '</div>';
$('#dvTable').append(newElement);
}
});
});
$(document).on('click', '#dvTable > div > select + input[type=button]', function() {
$(this).parent().remove();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="itemOptions" class="panel panel-info">
<div >
<font face="Arial" size="4" >Select Device:</font>
<select id="ddl_device_option">
<option id="1">device_1</option>
<option id="2">device_2</option>
<option id="3">device_3</option>
<option id="4">device_4</option>
<option id="5">device_5</option>
<option id="6">device_6</option>
<option id="7">device_7</option>
<option id="8">device_8</option>
<option id="9">device_9</option>
</select>
<input id = "btnAddItem" type="button" value="+" class="btn btn-warning">
</div>
</div>
<div id="dvTable">
</div>
注意:我从代码中删除了device_2
和,以向您展示此工作的示例。您可以根据我在此处提供的代码修复这些问题。device_3
推荐阅读
- c - C 数组插入/删除
- configuration - 将我的网站 prestashop (1.7.6.1) 从本地服务器转移到 ovh 服务器时出现问题
- c - 就地夹紧/剪辑数字的最佳实践
- bash - 这个差异如何解释?
- graphql - Graphcms 文件上传 400 错误请求
- ruby-on-rails - Rails API - ArgumentError:参数数量错误 - 尝试将 params [:id] 分配给实例变量时
- node.js - module.createRequire webpack 打包
- json - Discord python bot - 不更新 JSON 数据库的命令
- javascript - 如何在抽象方法的实现中获取注入的服务实例?
- c++ - 对“conclusionaryOutput(number1,number2,isASquare1,isASquare2)”的调用引发错误,我不知道为什么