2

我正在尝试在一个表单上实现一个组合框,该表单将他的select字段加载到 ajax 中。

我想打电话:

$('.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 的选择器上处理当前和未来就绪事件的最佳方法是什么?

4

1 回答 1

3

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

事实上,jQuery 采用您之前放置的任何其他选择器.ready并忽略它。

有一个内置的 Promise 对象.ready,您可以将其.done()用作替代方案。

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

或者你可以简单地使用

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

或者

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

Promise 版本的好处是你可以像这样使用它:

$.when( $.ready, $.post("foobar.php") ).done(function() {
    $(".combobox").combobox();
})
于 2012-10-17T14:25:30.503 回答