前端经常要处理一些点击事件,或者是在用户保存时,做一些检查,这时,我们常常会绑定一些事件,如
click,change等。当然这都是我们经常使用的功能。
有些时候,我们的页面可能还会涉及到一些改变,譬如在点击某个按钮时,在页面中插入一些新的内容,如果此前
我们对这个内容绑定过事件,那么新插入的内容会不会绑定事件呢?很可惜,是没有,因为我们通常都是在页面加
载OK之后就绑定事件,而此时,这部分新内容还未插入到页面。如下:
~~~
<!doctype html>
<html lang="en">
<head>
<!--网站编码格式,UTF-8 国际编码,GBK或 gb2312 中文编码-->
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="Keywords" content="关键词一,关键词二">
<meta name="Description" content="网站描述内容">
<meta name="Author" content="Yvette Lau">
<meta name = "viewport" content = " width = device-width, initial-scale = 1 ">
<title>CSSDemo</title>
<!--css js 文件的引入-->
<!-- <link rel="stylesheet" href="bootstrap-3.3.5-dist/css/bootstrap.min.css"/> -->
</head>
<body>
<div id = "content">
<input type="file" />
</div>
<div>
<input type="button" value="点我">
</div>
</body>
<script type="text/javascript" src="jquery-1.11.2.min.js"></script>
</html>
~~~
当前的页面中除了一个file控件,还有一个button按钮。下面是JS的内容,在JS中我们为file控件绑定了change事件,
在点击button按钮时,我们会往页面中插入一个file控件。
~~~
<script type="text/javascript">
$(function(){
$('input[type ="file"]').change(function(){
console.log($(this).val() )
if($(this).val() == ""){
alert("你好")
}
})
$('input[type ="button"]').click(function(){
$("#content").append('<input type="file"/>')
})
})
</script>
~~~
通过测试,可以发现,第一个file在change时,是能够触发事件的,而第二插入的file则没有change事件。对于这个问
题,有如下两种解决方法:
第一种是将绑定change事件封装成一个函数,在点击button按钮插入file控件之后,调用这个函数。如下:
~~~
<script type="text/javascript">
$(function(){
function fileChange(){
$('input[type ="file"]').change(function(){
console.log($(this).val())
if($(this).val() == ""){
alert("你好")
}
})
}
fileChange();
$('input[type ="button"]').click(function(){
$("#content").append('<input type="file"/>');
fileChange();
})
})
</script>
~~~
另一种方式,是在DOM加载之后和DOM内容发生改变时,绑定file控件的change事件,如下:
~~~
<script type="text/javascript">
window.onload,window.onchange = function(){
$('input[type ="file"]').change(function(){
console.log($(this).val() )
if($(this).val() == ""){
alert("你好")
}
})
}
$('input[type ="button"]').click(function(){
$("#content").append('<input type="file"/>')
})
</script>
~~~
两种方式均能解决此问题,至于究竟使用何种方式,就看个人的喜好。
- 前言
- jQuery轮播图插件
- JS模拟事件操作
- JS闭包与变量
- JS绑定事件
- HTML5之file控件
- JavaScript的this词法
- JavaScript的this词法(二)
- JS this词法(三)
- JS检测浏览器插件
- JS拖拽组件开发
- number输入框
- Modernizr.js和yepnode.js
- DOM变化后事件绑定失效
- div和img之间的缝隙问题
- 详解JavaScript作用域
- bootstrap入门
- 表单验证(登录/注册)
- Bootstrap网格系统
- Bootstrap排版
- Bootstrap创建表单(一)
- Bootstrap表单(二)
- Bootstrap按钮
- Bootstrap图片
- Bootstrap字体图标(glyphicons)
- Bootstrap的aria-label和aria-labelledby
- Bootstrap下拉菜单
- Bootstrap按钮组
- Bootstrap按钮菜单
- Bootstrap输入框组
- Bootstrap导航元素
- Bootstrap导航栏
- sublimeText频频崩溃
- JQuery不同版本的差异(checkbox)
- Bootstrap面包屑导航、分页、标签、徽章
- Bootstrap警告
- Bootstrap进度条
- 前端的上传下载
- JS字符串的相关方法
- CSS3选择器(全)
- CSS3新增文本属性详述
- 利用CSS3实现图片切换特效
- CSS3新增颜色属性
- CSS3的border-radius属性详解
- JS创建对象几种不同方法详解
- JS实现继承的几种方式详述(推荐)
- CSS3响应式布局
- JS模块化开发(requireJS)
- 利用@font-face实现个性化字体
- 前端在html页面之间传递参数的方法
- CSS自动换行、强制不换行、强制断行、超出显示省略号
- 如何在Html中引入外部页面
- reactJS入门
- React组件生命周期
- 使用React实现类似快递单号查询效果
- ReactJS组件生命周期详述
- React 属性和状态详解