2010-04-06 54 views
4

因此,今天我刚刚遇到了'live()'函数,它将任何未来和过去的元素绑定到您选择的任何事件上,如'onclick'。相当于'.live()'的jquery持久性CSS选择器

现在,我不必设置按钮,如每次我之后加载通过AJAX一个新的按钮...

$('a.btn.plus').button({icons:{primary:'ui-icon-plusthick'}}); 
$('a.btn.pencil').button({icons:{primary:'ui-icon ui-icon-pencil'}}); 
$('a.btn.bigx').button({icons:{primary:'ui-icon ui-icon-closethick'}}); 

因此,而不是调用每个我使用AJAX来加入时间这些行一个新的按钮,有没有类似的方式告诉JQuery设置我的按钮ANYTIME我添加新的按钮?

感谢您的帮助!

回答

2

不是真的。但是有一个函数.ajaxSuccess(),它在Ajax调用成功时触发。所以,你可以这样做:

$('body').ajaxSuccess(function() { 
    $('a.btn.plus').button({icons:{primary:'ui-icon-plusthick'}}); 
    $('a.btn.pencil').button({icons:{primary:'ui-icon ui-icon-pencil'}}); 
    $('a.btn.bigx').button({icons:{primary:'ui-icon ui-icon-closethick'}}); 
}); 

但是,这将在任何不仅对新的与类链接,运行。但是,如果您在一段时间附加它们(即不是一次多个a.btn.plus),则可能可以使用:last选择器(a.btn.plus:last)。


您还可以创建一个功能,只是从你的回调函数:

function links() { 
    $('a.btn.plus').button({icons:{primary:'ui-icon-plusthick'}}); 
    $('a.btn.pencil').button({icons:{primary:'ui-icon ui-icon-pencil'}}); 
    $('a.btn.bigx').button({icons:{primary:'ui-icon ui-icon-closethick'}}); 
} 

,并在Ajax调用:

$.ajax({ 
    //... 
    success: function(msg){ 
     links(); 
    } 
}); 

这样,您就可以通过父元素该函数仅用于在该元素内部查找链接(因此代码仅适用于新链接)。


最后一个选项将生成一个自定义事件,但最终这将类似于只是做你的情况函数调用,所以你得到的并不多。

+0

嘿猫,谢谢你的建议!使用Ajax成功更新按钮看起来像我现在最好的选择。 – uberdanzik 2010-04-06 18:07:08

1

您可以使用委托在您的成功也是功能

$("body").delegate("a.btn", "hover", function(){ 
$(this).toggleClass("hover"); 
}); 
+0

不知何故,我不能将你的答案与OP的问题联系起来。这与生成按钮有什么关系? – 2010-04-06 16:21:35

+0

“委托”描述:基于特定的一组根元素,为现在或未来与选择器匹配的所有元素的一个或多个事件附加处理程序。 不确定如何使用它,但“未来”这个词让我想尝试一些经验,希望它能真正做到我认为的那样。 – uberdanzik 2010-04-06 18:10:22

+0

实际上,我认为这正是我正在寻找的... “委托是使用.live()方法的替代方法,允许将事件委托的每个绑定都绑定到特定的DOM元素。” – uberdanzik 2010-04-06 18:12:10

0

有是一个jQuery插件叫的liveQuery覆盖您的要求。

我喜欢把这个插件在jQuery .live(),但不需要一个事件(“点击”)等

您可以在这里找到更多信息//

Jquery - Live Query Plugin