jQuery动态绑定
一、原始需求
在实际项目的时候,遇到了一个问题,就是通过JS动态生成的元素,无法触发JS事件。
原始的JS代码:
$(function () {
$(".original").click(function () {
alert("123");
});
})
上述类型的JS代码在处理随着页面加载而加载的DOM元素是没有问题的。但是在处理页面加载完成后,通过动态添加的方式添加上的元素是无效的,需要另外利用Jquery绑定。
动态添加元素的JS代码:
$(function () {
$(".run").click(function () {
var btn = "<button class='original'>我是新来的的</button>";
$(".out").append(btn);
});
})
此时如果点击 新添加的按钮,通过上述声明式无法处理响应事件的。
PS:至于原因是什么,这个我也不太清楚。
二、jQuery的on方法
通过查阅相关说明,发现jQuery的on()方法是支持在动态添加的元素上绑定事件的,使用见:
官网说明(英文):官方API解释
中文说明(中文):中文API解释(推荐)
详细说明请参考上述网站,这里只提出几个重点来讲解:
- 使用格式:jQueryObject.on( events [, selector ] [, data ], handler )---[此为可选项]
- 解释:events为单个或多个事件,handler为触发事件要执行的动作。
- 对于selector而言,如果为null或不写那么是绑定jQueryObject匹配到的元素;如果不为null,则表明绑定的是jQuyerObject的后台元素中所有符合selector要求的元素。
三、处理方法
<script type="text/javascript">
$(function () {
// 方法1
$(document).on("click", ".original", function () {
alert("HHHH");
});
//无效?
$(".original").on("click", function () {
alert("HHHH");
});
})
</script>
方法1肯定有效,但是很奇怪方法2无效。。。
四、补充
思考好了再补充,留待此次。。。
jQuery动态绑定的更多相关文章
- jquery动态绑定事件
什么是动态绑定? 动态绑定是指动态添加的DOM节点或者html元素,他们最开始时运行的时候是不存在的.如果要给这些动态加入的节点增加事件,就必须要用jquery的on方法来绑定事件. $('.cont ...
- jquery 动态绑定bind()及模拟鼠标点击A链接
近来自觉前端有小小进步,幸而记之. 1.两个 css class 紧挨在一起 则在html元素中,要同时拥有这两个class,才能起作用 .block.db{ background-image:url ...
- jquery - 动态绑定事件
举个例子: html页面 <div><button type="button" class="test">测试</button&g ...
- jquery动态绑定hover没有效果
在JQuery中,hover()函数本身是对 mouseenter && mouseleave 的封装,然而在原生event中,并没有hover这一事件,所以在传递参数hover时,并 ...
- jQuery 动态绑定的点击事件
$(function () { , $_div = $('#test'); $('input[name=addbtn]').on('click', function () { $_div.append ...
- jQuery 动态绑定插件livequery的用法
- jQuery动态绑定事件(左右移动)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- $("#XXX").click()和$("#YYY").on("click","指定的元素",function(){});的区别(jQuery动态绑定事件)
//绑定 下一页 的点击事件 $("a[aria-label='Next']").click(function(){ $("a[aria-label='Previous' ...
- Jquery动态绑定事件处理函数 bind / on / delegate
1.bind方法绑定的事件处理函数不会应用到后来添加到DOM中的新元素.比如你在用bind给页面元素绑定事件之后,又新添加了一些与之前绑定过事件的元素一样的DOM元素,但是这些事件并不能在新的DOM元 ...
随机推荐
- php:二进制处理
直接上代码 <?php #字符串 #php中字符串就是二进制,不用特别转化 #方法1:直接把字符串当成二进制 $c = "ccc"; var_dump($c, bin2hex ...
- nopcommerce插件相关
注意Description.txt中,以下字段必须配置当前可用.我抄人家代码的时候,人家是3.4 我也配成3.4,结果我的nop是3.7的,后台半天显示不出来插件,浪费了一下午.
- Jquery.Linq用法
下载:http://linqjs.codeplex.com/ LINQ Pad Enumerable.Range(0, 20).Where("$ % 3 == 0").Select ...
- watch命令
watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行.在Linux下,watch是周期性的执行下个 ...
- adb端口被占用
程序不能执行,kill掉任务管理器里面adb服务,重新连接设备仍然有错 查到可能是adb端口被占用 查看adb用的是哪个端口:C:\Users\wanglin>adb nodaemon serv ...
- 笨方法学python--简介
该章提到编程新手所需的三种最重要的技术:读和写,注重细节,发现不同. 读 和 写 即熟悉代码中的各种字符. 注 重 细 节 将例子一字不差地打出来,通过实践训练自己 发 现 不 同 这个是通过长年累月 ...
- Video Cards
Video Cards time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...
- Spring Boot 系列教程8-EasyUI-edatagrid扩展
edatagrid扩展组件 edatagrid组件是datagrid的扩展组件,增加了统一处理CRUD的功能,可以用在数据比较简单的页面. 使用的时候需要额外引入jquery.edatagrid.js ...
- java 接口的回调
Example6_3.java interface ShowMessage { void 显示商标(String s); } class TV implements ShowMessage { pub ...
- mouseleave 和 mouseout 区别
jQuery中的mouseleave和mouseout的区别 $("li").each(function(i) { //删除的鼠标划过的显示与隐藏 ...