在使用jQuery编写网页时,我们经常需要动态加载、修改元素。但是在一些情况下,我们会遇到一些不能动态加载、修改的元素,这些元素可能是在网页初次加载时就已经存在的。
//例如,下面这段代码 $(document).ready(function(){ $('ul li').click(function(){ alert('clicked!'); }); }); //在网页中会将所有ul标签下的li标签的点击事件绑定为弹出一个"clicked!"的提示框。 //然而,如果在这个代码之后再通过ajax请求动态加载了一些li标签,这些标签的点击事件并不会响应。
这是因为在文档准备就绪后,jQuery只会对已经存在的元素绑定事件。而新增的元素并不在jQuery的掌控之下,无法响应已经绑定的事件。
为了解决这个问题,我们可以使用jQuery中的on()方法。这个方法可以在父级元素上绑定事件,而不是直接在子元素上绑定。当子元素发生事件时,事件会从子元素冒泡到父级元素,然后再由父级元素响应这个事件。这样,新增的元素也能够响应已经绑定的事件了。
//修改之前的代码如下 $(document).ready(function(){ $('ul li').click(function(){ alert('clicked!'); }); }); //修改后的代码如下 $(document).ready(function(){ $('ul').on('click', 'li', function(){ alert('clicked!'); }); }); //在这段代码中,我们将click事件绑定在ul标签上,当ul标签内的子元素li被点击时,事件会从子元素冒泡到父级元素ul,然后再被响应。
通过on()方法,我们可以让动态加载的元素也能够响应我们已经绑定的事件了。