我有这个代码来处理复选框检查事件:
<html>
<head>
<style>
#leftPane {
width: 200px;
height: 500px;
border: 1px solid;
float: left;
}
#rightPane {
height: 500px;
width: 600px;
border: 1px solid;
border-left: 0px;
float: left;
}
#addTo {
border: 1px solid;
}
#addTo input {
border: none;
}
#showList ul{
list-style: none;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script>
$(document).ready(function(){
$('#todoItem').keypress(function(e){
if (e.which ==13) {
var item = $('#todoItem').val();
var chkbox = "<input type='checkbox' name='"+item+"'>"
$("#showList ul").append("<li>"+chkbox+""+item+"</li>");
}
})
$("#showList li ul input[type=checkbox]").change(function(){
var $this = $(this);
alert("tell me");
/*if ($this.is(':checked')) {
$(this).parent().remove();
}*/
})
})
</script>
</head>
<body>
<div id="leftPane">
<ul>
<li>Shopping List</li>
<li>Movie List`</li>
<ul>
</div>
<div id="rightPane">
<p>Let's add some todo</p>
<div id="addTo">
<input id="todoItem" type="text" placeholder="Add a todo"></input>
</div>
<div id="showList">
<ul>
</ul>
</div>
</div>
</body>
当我点击复选框时,事件处理程序
( $("#showList li ul input[type=checkbox]").change(function(){ )
未被触发(不显示警报)。如果我选择
$('#showList > ul").click (...)
然后事件处理程序触发,但这意味着点击ul
内的任何位置,不一定是checkbox
。
我正在关注这些链接以开发上述代码:
jQuery checkbox checked state changed event Use JQuery to check a checkbox in a parent list-item?
jsfiddle页面:https://jsfiddle.net/
非常感谢任何帮助。
由于
答案 0 :(得分:1)
我的解决方案
$(document).on('change', "#showList ul li input[type=checkbox]", function(){
var $this = $(this);
alert("tell me");
/*if ($this.is(':checked')) {
$(this).parent().remove();
}*/
})
解决方案中的问题:
li
之前写过ul
;您希望li
附上ul
代码,而情况并非相反.change
那样工作。您需要实施event delegation
技术才能适用于您的情况。$('#showList > ul").click (...)
你知道你的错误是什么大多数浏览器事件从最深处传播或传播 文档中最内层的元素(事件目标)。委托活动 他们可以从后代处理事件 稍后添加到文档中的元素。
通过选择在附加委托事件处理程序时保证存在的元素,您可以使用委派事件来避免频繁附加和删除事件处理程序。保证document
对象始终存在。因此,document
对象会将change
事件委托给与选择器#showList ul li input[type=checkbox]
匹配的元素。
答案 1 :(得分:0)
当您注册onChange
事件时,您会针对当前页面中的匹配元素执行此操作。新元素不会向其注册该事件侦听器。
要解决此问题,您可以在创建项目时添加事件,也可以使用event delegation。
利用冒充DOM
和事件委托的事件,在静态父代(即#showlist
)上注册事件,如下所示:
$('#showlist').on('change', 'input[type=checkbox]', function(event) {
// your handler here
});
当您单击所需元素时,事件将bubble
向上,直到它到达具有其类型的已注册处理程序的元素。您会注意到event.target
是实际的事件目标,而不是处理事件的元素。
除此之外,您的选择器应为#showlist ul li input[type='checkbox']
,而不是#showlist li ul input[type='checkbox']
。
答案 2 :(得分:0)
让我们按照KISS方法。
class CDistance
{
private:
int feet;
int inches;
int feet2;
int inches2;
int five;
public:
CDistance();
CDistance(int, int, int, int, int);
~CDistance();
void setDistt();
void printDistt() const;
void add(const CDistance&) const;
void subtract(const CDistance&) const;
void menu(const CDistance&) const;
void inputDist(CDistance distList[], int size);
void printAndAdd(const CDistance distList[], int size);
};
CDistance::CDistance()
{
feet = 0;
inches = 0;
feet2 = 0;
inches2 = 0;
five = 0;
}
CDistance::CDistance(int f, int i, int f2, int i2, int fi)
{
feet = f;
inches = i;
feet2 = f2;
inches2 = i2;
five = fi;
}
CDistance::~CDistance()
{
}
这是你想要的吗?