在jQuery中委派一个ready事件

时间:2012-10-17 14:18:36

标签: jquery

我正在尝试在ajax中加载select字段的表单上实现combobox

我想打电话:

$('.combobox').combobox();

当新的组合框准备就绪时。

目前,我把它放在我的ajax回复中:

<script type="text/javascript">
  $(document).ready(function() {
    $('.combobox').combobox();
  });
</script>

这有效,但在资源方面看起来很糟糕。所以我一直在寻找一种更好的方法来处理ready事件。

我试过了:

 $('.combobox').live('ready', function() {
     $(this).combobox();
 });

但稍后阅读live()不支持ready事件。

然后,我试过了:

    $('body').delegate('.combobox', 'ready', function() {
        $(this).combobox();
    });

但它也不起作用。

所以问题是:在jquery中处理选择器上当前和未来就绪事件的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

没有理由将ready事件绑定到文档以外的任何内容。

实际上,jQuery会将.ready之前放置的任何其他选择器都忽略它。

.ready有一个内置的承诺对象,可以与.done()一起使用。

$.ready.promise().done(function(){
    $('.combobox').combobox();
});

或者你可以简单地使用

$(function(){
    $('.combobox').combobox();
});

$(document).ready(function(){
    $('.combobox').combobox();
});

承诺版本的好处是您可以像这样使用它:

$.when( $.ready, $.post("foobar.php") ).done(function() {
    $(".combobox").combobox();
})