我真的不明白这个代表和承诺的事情。根据文档,委托会绑定选择器和事件到某种包装容器,以后可以再次使用当前和未来的项目?

promise()会将事情重新映射到第一次绑定时,如果新加载的所有内容都匹配?也许我真的不明白这个承诺的方法。

如果包装器仍然存在,但包装器容器中的内容已经更改,或者通过ajax重新加载,该怎么办?为什么破坏事件不触发或工作,因为它是第一次绑定?

是的,我一直到docs页面,我只是不理解他们的解释完全

我有点困惑的这个问题。我认为这是因为你被承诺和委托混淆。它们实际上是jQuery的完全不相关的功能。我将分别解释:

代表

delegate是在jQuery 1.4.2中引入的jQuery的一个特性。 (这是一个更好的方法,live功能,在jQuery 1.3中添加)。它解决了一个特定的问题,修改DOM,特别是与AJAX调用。

绑定事件处理程序时,将其绑定到选择。所以你可以做$(‘。special’)。点击(fn)绑定一个事件处理器到特殊类的所有成员。你绑定到那些元素,所以如果你然后从这些元素之一删除类,事件仍然会被触发。相反,如果你将类添加到一个元素(或添加一个新的元素到DOM),它不会有事件绑定。

有一个Javascript的功能,减轻这个称为“事件冒泡”。当事件被触发时,首先浏览器通知事件发生的元素。然后它向上移动DOM树,并通知每个祖先元素。这意味着您可以在DOM树上的元素上绑定事件处理程序,以及在任何子元素(即在处理程序绑定时不存在的那些)上触发的事件。

委托是jQuery的这个实现。首先,选择一个父元素。然后你指定一个选择器 – 处理程序将只运行,如果始发元素匹配这个选择器。然后指定一个事件类型,如点击,提交,键下,就像bind.然后最后指定事件处理程序。

$('#containingElement').delegate('a.special','click',function() {
    alert('This will happen on all links with the special class');
});

诺言

promise是jQuery功能集的另一个相对较近的增加。它是在jQuery 1.5中引入的Deferred概念的一部分。 (我认为“deferred”和“delegate”之间的声音的相似性可能是混淆的原因。)这是一种抽象异步代码复杂性的方法。最好的例子是使用AJAX调用,因为$ .ajax返回的对象是Deferred对象。例如:

$.ajax({
    url: 'somepage.cgi',data: {foo: 'bar'}
}).done(function() {
    // this will be run when the AJAX request succeeds
}).fail(function() {
    // this will be run when the AJAX request fails
}).always(function() {
    // this will be run when the AJAX request is complete,whether it fails or succeeds
}).done(function() {
    // this will also be run when the AJAX request succeeds
});

所以它在许多方面与$ .ajax调用中的绑定成功处理程序相同,只是您可以绑定多个处理程序,并且可以在初始调用后绑定它们。

另一个时候,异步处理是有用的是动画。你可以提供回调函数,但更好的做法是类似于上面提供的AJAX示例的语法。

在jQuery 1.6中,这个功能是可能的,promise是这个实现的一部分。在jQuery选择上调用promise,当对象中的所有动画都完成时,你将得到一个可以绑定事件处理程序的对象。

例如:

$('div.special').fadeIn(5000).promise().then(function() {
    // run when the animation succeeds
}).then(function() {
    // also run when the animation succeeds
});

再次,这在效果上类似于传统方法,但它增加了灵活性。您可以稍后绑定处理程序,并且您可以绑定多个。

概要

基本上,delegate和promise之间没有显着的关系,但它们都是现代jQuery中的有用特性。

ajax – jquery的promise方法如何真正工作?的更多相关文章

  1. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. 在IOS9中的Cordova应用程序使用JQuery / Javascript的window.history问题

    在两个测试用例中唯一改变的是Cordova.js.解决方法我看到这是几个星期前,但我会发布这个,以防其他人遇到它.听起来它可能与iOS9中的哈希更改生成的导航事件有关.如果是这样,可以将其添加到index.html以禁用哈希侦听:

  3. iOS 5上的jQuery事件

    解决方法在Apple开发论坛上由一个人回答:我需要在将元素添加到DOM之后才绑定(),如下所示:

  4. 应用程序关闭时的iOS任务

    我正在构建一个应用程序,通过ajax将文件上传到服务器.问题是用户很可能有时不会有互联网连接,并且客户希望在用户重新连接时安排ajax调用.这可能是用户在离线时安排文件上传并关闭应用程序.应用程序关闭时可以进行ajax调用吗?

  5. android – Phonegap本地构建 – jquery ajax错误:readystate 0 responsetext status 0 statustext error

    解决方法您是否在索引文件中包含了内容安全元标记?

  6. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  7. 设置焦点到输入框和显示Android键盘使用jquery手机在pageshow

    我正在设置焦点到输入框,并显示Android键盘使用jquery手机网页显示.我从Web上尝试过很多选项.但是没有一个在模拟器和移动设备中都能按预期工作.这是代码:查找屏幕截图以供参考请咨询…解决方法对我有用的解决方案

  8. android – 如何在焦点()上以编程方式隐藏jquery mobile中的键盘

    我想在Focus()上隐藏键盘,但是当$(“.ui-input-text”).focus();它会自动打开键盘.我只是想隐藏在特定的屏幕上,我用document.activeElement.blur()测试;但它也没有关注()输入.解决方法提交表单时,iOS键盘可能不会自动关闭.这是一个非常实用的问题,因为不应要求用户手动关闭键盘,否则他们不会期望需要这样做.可以通过调用document.acti

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. jQuery实现简单的抽奖游戏

    这篇文章主要为大家详细介绍了jQuery实现简单的抽奖游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到<input>中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部