我正在尝试将点击事件绑定到具有div
的某个id="unit"
。这些div
是在运行时生成的,我的javascript似乎不起作用。
我的javascript点击事件。
$("#unit").click(function(){
alert('1');
});
在ajax调用之前。
<div id="content">
<div id="building">
</div>
<div id="units">
</div>
</div>
在ajax电话之后。
<div id="content">
<div id="building">
<div value="1" class="buildingBlock"><h3 style="text-align: center;">Level - 1</h3></div>
<div value="2" class="buildingBlock"><h3 style="text-align: center;">Level - 2</h3></div>
<div value="3" class="buildingBlock"><h3 style="text-align: center;">Level - 3</h3></div>
<div value="4" class="buildingBlock"><h3 style="text-align: center;">Level - 4</h3></div>
</div>
<div id="units">
<div value="1" id="unit">#02-01<br>3 room(s)</div>
<div value="2" id="unit">#02-02<br>2 room(s)</div>
<div value="3" id="unit">#02-03<br>5 room(s)</div>
</div>
</div>
答案 0 :(得分:6)
因为您要动态追加#unit
元素,所以需要将事件委托给最近的父元素。试试这个:
$("#units").on('click', '.unit', function(){
alert('1');
});
此外,多个id
属性无效。您应该更改代码以使用类,如下所示:
<div id="units">
<div value="1" class="unit">#02-01<br>3 room(s)</div>
<div value="2" class="unit">#02-02<br>2 room(s)</div>
<div value="3" class="unit">#02-03<br>5 room(s)</div>
</div>
答案 1 :(得分:2)
你不能有多个具有相同身份的元素。
使用类来代替。例如class="unit"
当你绑定事件时使用$(".unit")..
此外,如果我们正在考虑成功方法或后端的Ajax请求,您应该准备额外的js代码以正确初始化新元素。让事件监听父母实际上是一个黑客攻击。
所以,如果你有:
$.get("someurl", {}, function(data){
$("#units").append(data);
$("#units .unit").unbind("click").bind("click", function(){
// your click handler here
});
});
至少我会这样做,除非你特别需要控制来自父母的事件。
答案 2 :(得分:0)
将id
更改为class
unit
<div id="units">
<div value="1" class="unit">#02-01<br>3 room(s)</div>
<div value="2" class="unit">#02-02<br>2 room(s)</div>
<div value="3" class="unit">#02-03<br>5 room(s)</div>
</div>
尝试使用委托事件处理程序。
$("#units").on('click', '.unit', function(){
alert('1');
});