【发布时间】:2014-03-24 08:44:12
【问题描述】:
我正在生成从下拉列表中选择的选项的输出。 我想允许用户从输出中“删除”选择。
我无法让我的代码工作,这里是呈现输出的代码:
$('#dataCombo').change(function(){
$('#dataOutput').html('');
var values = $('#dataCombo').val();
for(var i = 0; i < values.length; i += 1) {
$('#dataOutput').append(values[i] + '<p class="removeable">X</p>'+'<br/>')
}});
因此,选定的下拉项目显示在页面上,旁边有一个“X”,在 P 标记中,类为“可移动”,生成。我已经在 chrome 中检查了这个,并且 p 标签是用正确的类创建的。
我添加了此代码以删除单击的选项,但它不起作用:
$('.removeable').click(function(){
$('.removeable').remove();
console.log("I did this");
});
该项目没有被删除,我没有在控制台中获得日志。知道为什么这不起作用吗?
编辑:
我已将我的代码修改为:
$('#dataOutput').append('<p class="removeable">' + values[i] + 'X</p>'+'<br/>')
它确实删除了该项目,但是该选项在下拉框中仍处于“选中状态”。我也试图让它“取消选择”这个。我正在使用 Bootstrap 和激活“多个”的下拉菜单。虽然该选项当前已从输出中删除,但并未从选择框中删除(这意味着当单击另一个选项时,它会重新呈现先前删除的元素)。
我已经(希望)以与重复问题不同的方式更清楚地提出了这个问题: Unselect an option using jQuery on a Bootstrap selectpicker
【问题讨论】:
-
没有人解释说当浏览器执行你的
$('.removeable').click(function(){});行时p元素还不存在,所以点击处理程序不会被绑定。您需要告诉 jQuery 将点击处理程序绑定到祖先元素(当时 确实 存在于页面上)并将点击事件委托给您的p。 -
最后,您可能想要删除
p的父级(或更远的祖先 - 取决于您的标记),否则所有代码都会删除X -
是的,没错,目前代码所做的只是删除 X,而不是选项本身
-
如果没有看到更多的 HTML,很难用正确的 jQuery 回答以删除 selection。这个问题现在被标记为重复,因为之前已经介绍过 jQuery 中的事件委托。查看此问题顶部的链接,了解有关事件委托的信息。如果您在此之后遇到问题,请询问有关删除正确元素并提供相关 HTML 和 JavaScript 的另一个问题。