我正在尝试实现 combobox在一个以 ajax 加载 select
字段的表单上。
我想打电话:
$('.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 中处理选择器上当前和 future 就绪事件的最佳方法是什么?
最佳答案
没有理由将就绪事件绑定(bind)到文档以外的任何内容。
事实上,jQuery 会接受您放置在 .ready
之前的任何其他选择器并忽略它。
.ready
有一个内置的 Promise 对象,您可以将其与 .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();
})
关于jquery - 在 jQuery 中委托(delegate)就绪事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12936437/