ajax – jquery的promise方法如何真正工作?
我真的不明白这个代表和承诺的事情。根据文档,委托会绑定选择器和事件到某种包装容器,以后可以再次使用当前和未来的项目?
promise()会将事情重新映射到第一次绑定时,如果新加载的所有内容都匹配?也许我真的不明白这个承诺的方法。 如果包装器仍然存在,但包装器容器中的内容已经更改,或者通过ajax重新加载,该怎么办?为什么破坏事件不触发或工作,因为它是第一次绑定? 是的,我一直到docs页面,我只是不理解他们的解释完全
我有点困惑的这个问题。我认为这是因为你被承诺和委托混淆。它们实际上是jQuery的完全不相关的功能。我将分别解释:
代表
绑定事件处理程序时,将其绑定到选择。所以你可以做$(‘。special’)。点击(fn)绑定一个事件处理器到特殊类的所有成员。你绑定到那些元素,所以如果你然后从这些元素之一删除类,事件仍然会被触发。相反,如果你将类添加到一个元素(或添加一个新的元素到DOM),它不会有事件绑定。 有一个Javascript的功能,减轻这个称为“事件冒泡”。当事件被触发时,首先浏览器通知事件发生的元素。然后它向上移动DOM树,并通知每个祖先元素。这意味着您可以在DOM树上的元素上绑定事件处理程序,以及在任何子元素(即在处理程序绑定时不存在的那些)上触发的事件。 委托是jQuery的这个实现。首先,选择一个父元素。然后你指定一个选择器 – 处理程序将只运行,如果始发元素匹配这个选择器。然后指定一个事件类型,如点击,提交,键下,就像 $('#containingElement').delegate('a.special','click',function() { alert('This will happen on all links with the special class'); }); 诺言
$.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中,这个功能是可能的, 例如: $('div.special').fadeIn(5000).promise().then(function() { // run when the animation succeeds }).then(function() { // also run when the animation succeeds }); 再次,这在效果上类似于传统方法,但它增加了灵活性。您可以稍后绑定处理程序,并且您可以绑定多个。 概要 基本上,delegate和promise之间没有显着的关系,但它们都是现代jQuery中的有用特性。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |