动态绑定新行为
Bind a new behavior dynamically
我有这个HTML:
<div class="bold knowmore login" id="j-6">
<span>...</span>
</div>
和这个jQuery:
$(function(){
$(".login").on("click", function(){
console.log('login clicked!');
$(".bold.knowmore").removeClass("login").addClass("displayAdvert");
});
$(".displayAdvert").on("click",function(){
console.log("display was clicked!");
});
});
但是输出总是:
登录点击!
但是,由于某种原因,HTML被更新了,但是事件总是调用click login。有人知道我该怎么解决吗?
您需要使用一个委托事件方法
你动态地分配.displayAdvert
类,所以你需要使用。on方法与动态元素委托:
我假设你的故事中有一个静态父元素,所以使用它的ID:
$(function(){
$(".login").on("click", function(){
console.log('login clicked!');
$(".bold.knowmore").removeClass("login").addClass("displayAdvert");
});
$("#parent").on("click", ".displayAdvert", function(){
console.log("display was clicked!");
});
});
http://api.jquery.com/on/direct-and-delegated-events
使用事件委托,因为您正在动态添加一个类:
$(function(){
$(document).on("click",".login", function(e){
e.preventDefault();
console.log('login clicked!'); $(".bold.knowmore").removeClass("login").addClass("displayAdvert");
});
$(document).on("click", '.displayAdvert',function(e){
e.preventDefault();
console.log("display was clicked!");
});
});
演示对于动态创建的元素,您可以使用如下内容:
$(document).on("click", ".displayAdvert", function() {
console.log("display was clicked");
});
相关文章:
- 将值动态绑定到jquery中的切换按钮
- 如何使用AnguarJS动态绑定网站数据
- 在extJS 4.2中,有没有一种方法可以将模型值动态绑定到表单
- 我想在ext.js4.2中将树存储动态绑定到树面板中
- 如何让 AngularJS 选取在 JavaScript 中创建的动态绑定
- Emberjs - 将参数动态绑定到视图
- KnockoutJS删除动态绑定
- jquery验证,动态绑定表单验证
- 如何将文件夹中包含的控制器动态绑定到angularjs中的视图
- 在JavaScript中创建动态绑定
- Jquery:如何动态绑定带有onload事件的文本框
- 通过json动态绑定作用域到ng模型
- 使用Ember.js将新行动态插入到Table上下文中
- 如何将变量与函数动态绑定
- jQuery动态绑定文件输入并在函数中检索文件
- 动态绑定onclick事件为for循环中的所有按钮提供相同的值
- typeahead选择事件(jQuery)的动态绑定
- 将事件动态绑定到表行和列
- 动态表行未绑定
- 动态绑定新行为