锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / JQuery / AJAX和事件
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

AJAX和事件


假设我们想让字典词条名来控制后面解释的可见性,即单击词条名可以显示或隐藏相应的解释。使用到目前为止介绍的技术,实现这一点应该很简单,参见代码清单6-18.

代码清单6-18
//未完成的代码
$( document ). ready( function ( ) {
$( 'h3. term' ). click( function ( ) {
$( this ). siblings( '. definition' ). slideToggle( );       
)};
)};

当词条被单击时,该元素找到类名中包含definition的相邻节点,并根据情况滑入或滑出这些节点。

虽然看起来一切正常,但在现有代码基础上单击不会有什么结果。因为在添加click处理程序的时候,词条还没有被添加文档中。而且即使已经把click处理程序添加到词条元素,只要一单击其他字母,这些处理程序仍然会丢失绑定。

这是通过AJAX生成页面内容时的一个常见问题。对此,一种常见的解决方案就是在页面内容更新时重新绑定处理程序。但这样做会相当繁琐,因为哪怕页面的DOM结构有一点点变化,都会调用绑定处理程序的代码。

另外一种值得推荐的做法是事件委托。在此,事件委托的本质就是把事件处理程序绑定到一个祖先元素,而这个祖先元素始终不变。对于这个例子而言,我们可以使用.live()方法把click处理程序绑定到document,以这种方式来捕获单击事件,参见代码清单6-19。

代码清单6-19
$( document ). ready( function ( ) {
$( 'h3. term' ). live( 'click', function'( ) {
$( this ). siblings( '. definition' ). slideToggle( ); 
)};
)}; 

.live()方法告诉浏览器密切注意页面上发生的任何单击事件。当(且仅当)被单击的元素与h3.term选择符匹配时,才会执行事件处理程序。这样,无论单击哪个词条,都可以正常切换相应的解释,即使对应的解释内容是通过AJAX后来添加到文档中的也没有问题。

jQuery Ajax 事件


Ajax请求会产生若干不同的事件,我们可以订阅这些事件并在其中处理我们的逻辑。在jQuery这里有两种Ajax事件:局部事件 和 全局事件。

局部事件就是在每次的Ajax请求时在方法内定义的,例如:

 
$.ajax({
beforeSend: function(){
// Handle the beforeSend event
},
complete: function(){
// Handle the complete event
}
// ...
});

全局事件是每次的Ajax请求都会触发的,它会向DOM中的所有元素广播,在上面 getScript() 示例中加载的脚本就是全局Ajax事件。全局事件可以如下定义:

 
$("#loading").bind("ajaxSend", function(){
$(this).show();
}).bind("ajaxComplete", function(){
$(this).hide();
});
或者:
$("#loading").ajaxStart(function(){
$(this).show();
});

我们可以在特定的请求将全局事件禁用,只要设置下 global 选项就可以了:

$.ajax({
url: "test.html",
global: false,// 禁用全局Ajax事件.
// ...
});
友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内