jquery的promise方法到底是如何工作的?

2023-12-21

我真的不明白什么delegate and promise are.

根据文档 -

  • delegate会将选择器和事件绑定到某种包装容器,该包装容器可以在以后再次用于当前和将来的项目。
  • promise()如果新加载的所有内容都匹配,则会将事物重新映射回第一次边界时的状态。也许我不太理解这个promise方法。

如果包装器仍然存在,但包装器容器中的内容已更改和/或通过重新加载怎么办Ajax?为什么事件没有像第一次绑定时那样触发或工作?

是的,我去过文档页面,我只是不完全理解他们的解释。


这个问题我有点困惑。我认为这是因为you感到困惑promise and delegate。它们实际上是 jQuery 完全不相关的功能。我将分别解释一下:

delegate

delegate http://api.jquery.com/delegate是 jQuery 1.4.2 中引入的 jQuery 功能。 (这是一种更好的方法live http://api.jquery.com/livejQuery 1.3 中添加的功能)。它解决了修改 DOM 带来的特定问题,特别是 AJAX 调用。

当您绑定事件处理程序时,您将其绑定到选择。所以你可能会这样做$('.special').click(fn)将事件处理程序绑定到所有成员special班级。您绑定到这些元素,因此如果您随后从这些元素之一中删除该类,该事件仍然会被触发。相反,如果将类添加到元素(或将新元素添加到 DOM 中),则它不会绑定事件。

Javascript 有一个功能可以缓解这种情况,称为“事件冒泡”。当事件被触发时,浏览器首先通知事件起源的元素。然后它沿着 DOM 树向上查找,并通知每个祖先元素。这意味着您可以将事件处理程序绑定到 DOM 树上方的元素上,并在任何子元素上触发事件(甚至是那些在绑定处理程序时不存在的元素)。

delegate是 jQuery 的实现。首先,选择一个父元素。然后指定一个选择器 - 仅当原始元素与该选择器匹配时才会运行处理程序。然后指定事件类型,例如click, submit, keydown,就像bind http://api.jquery.com/bind。最后指定事件处理程序。

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

promise

promise http://api.jquery.com/promise是 jQuery 功能集中另一个相对较新的新增内容。它是Deferred http://api.jquery.com/category/deferred-object/jQuery 1.5 中引入的概念。 (我认为“延迟”和“委托”之间的声音相似性可能是混淆的根源。)这是一种抽象出异步代码复杂性的方法。最好的例子是 AJAX 调用,因为返回的对象$.ajax is a 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 http://api.jquery.com/promise是此实现的一部分。你打电话promise在 jQuery 选择上,当对象中的所有动画完成时,您将获得一个可以将事件处理程序绑定到的对象。

例如:

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

同样,这与传统方法的效果相似,但增加了灵活性。您可以稍后绑定处理程序,并且可以绑定多个。

Summary

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jquery的promise方法到底是如何工作的? 的相关文章

随机推荐

  • ssh 服务器连接到主机 xxx 端口 22:linux-ubuntu 上的连接超时 [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我正在尝试通过 ssh 连接到远程服务器 但连接超时 我运行了以下命令 ssh 电子邮件受保护 cdn cgi l email pro
  • 使用 QVariantAnimation 显示图像列表

    我在使用 QVariantAnimation 时遇到一些问题 我一直在寻找如何使用它 但我只是不明白该怎么做 我读到的文档和示例让我更加困惑 我有一个 png 图像列表 我希望它们在一定时间内从 A 点移动到 B 点并根据我定义的步骤更改图
  • Python请求以字符串形式发送证书[重复]

    这个问题在这里已经有答案了 我似乎无法让握手正常工作 cert path to cert file pem url https example com api requests get url cert cert verify True 当
  • 从 Docker 容器中的 maven Quarkus 项目上的资源文件夹中读取 txt 文件

    我有一个项目来解析一个大文件中的一些信息 The project uses maven and java 结构如下 当我从 IDEA 运行应用程序时 我可以使用以下命令读取该文件 public void buffer throws IOEx
  • 404 在 Laravel 8 中未找到

    我正在创建一个简单的网站Laravel在运行网站时遇到了问题404 NOT FOUND Laravel 8 当我点击时索引页面正在工作about us and 联系我们页面出现错误404 NOT FOUND我不知道这是为什么 到目前为止我尝
  • 如何将数据从 Firebase 检索到 ListView(使用自定义数组适配器)

    我目前设计了一个地点浏览器应用程序 其中在列表视图中显示 3 个项目 当用户登录时 他会找到一个类别列表 单击某个类别后 将显示该类别下的地点列表 我已将该应用程序与 Firebase 关联 现在 我想显示 2 项 placeTitle a
  • 匹配括号内的特定单词

    我需要匹配并替换括号之间的特定单词 包括括号 像这样的东西 xxx xxxxSPECIFICWORDxxxxxxxxxxx xxx 我需要更换这个 xxxxSPECIFICWORDxxxxxxxxxxx 我的文字看起来像这样 xx xxxx
  • 从远处看时,ThreeJS 纹理是像素化的

    我正在使用 webGL 和 ThreeJS 然后我遇到了以下问题 从远处看时 具有大图像的纹理会出现像素化 检查示例 http jsfiddle net 4qTR3 1 http jsfiddle net 4qTR3 1 下面是代码 var
  • 有没有为C#实现的图数据结构

    我试图找到一种在 C 中重用的图形数据结构 但没有成功 当然 我可以借用数据结构书籍 但我希望它更具商业实用性 如果您能告诉我实现图的最佳方法是什么 我将不胜感激 谢谢 快速图表 https github com YaccConstruct
  • GNU emacs 相当于 func-menu

    GNU emacs 是否有等效的 func menu 当我可以访问 xemacs 时 我使用了 func menu 并且与 speedbar 或 sr speedbar 相比 我更喜欢它的行为 具体来说 我喜欢只显示当前文件的功能 功能列表
  • 在程序包管理器控制台窗口中进入\退出 PowerShell 模式

    我想我不小心进入了 PowerShell 模式 所以目前我的控制台显示 PS gt c dev 我想知道如何退出 PS gt 模式并返回 PM 模式 我希望控制台窗口显示 PM gt 以便我可以安装软件包 这样的事情我也经历过 我尝试重新启
  • Spark的Column.isin函数不接受List

    我正在尝试从 Spark Dataframe 中过滤掉行 val sequence Seq 1 2 3 4 5 df filter df column isin sequence 不幸的是 我收到不支持的文字类型错误 java lang R
  • 在 python 中打印混淆矩阵的精度

    这是我的代码 from sklearn metrics import confusion matrix cm confusion matrix y test y pred 这就是我得到的 0 1 0 102 39 1 73 29 我怎样才能
  • IE10、IE11 中的跨浏览器 css 渐变

    我在所有浏览器中为深色按钮做了渐变 看起来不错 除了 IE10 IE11 版本 顶部和底部有浅色条纹 我通过 colorzilla 渐变编辑器生成渐变 链接到按钮 http buttons selcet com ua HTML div cl
  • Webpack 捆绑导致未知提供者 $injector/unpr 错误

    未知提供商 NavigationCtrl Restangular 我目前正在处理我的旧项目 让它们再次完全工作 作为一个小的重构练习 我遇到了一些不再编译的 AngularJS 代码 我相信这取决于更新的依赖项 因为我至少 3 年没有更改此
  • 实体框架在生成数据库时创建下划线列

    我有一个简单的对象模型如下 public class Product public long ProductId get set public int CategoryId get set public Category Category
  • Rails3 Google 地图使用 selenium 进行测试

    我正在尝试使用 Rails3 测试谷歌地图应用程序 我使用黄瓜与水豚和硒进行 JavaScript 测试 我有一张地图 等待谷歌地图加载 然后向我的服务器发送 ajax 请求 在服务器上我获取要插入地图中的位置 我想知道硒是否可以等待谷歌地
  • 验证一个整数并使其为 5 位数字

    我正在上我的第一堂 Java 课 我需要询问邮政编码 我知道如果他们不输入 5 位数字 如何要求新输入 但如果他们输入非整数 我该如何要求新输入 这是我所拥有的 import java util Scanner public class A
  • 将原语传递给 OCMock 的存根

    我正在学习如何使用 OCMock 来测试我的 iPhone 项目 我有这样的场景 一个带有getHeightAtX andY 方法和 Render 类使用HeightMap 我正在尝试使用一些单元测试渲染HeightMap嘲笑 这有效 id
  • jquery的promise方法到底是如何工作的?

    我真的不明白什么delegate and promise are 根据文档 delegate会将选择器和事件绑定到某种包装容器 该包装容器可以在以后再次用于当前和将来的项目 promise 如果新加载的所有内容都匹配 则会将事物重新映射回第