目前,我正在使用AJAX重新加载我网站的一部分,其中包含来自jQuery UI的滑块。那些滑块没有重新加载,因为在我的javascript中,它们只加载在DOM上。
core.js
$(function() {
$('.slider').slider();
$('#load').click(function() {
$.getScript('load.js');
});
});
load.js
$('#foobar').html('<div class="slider"></div><div class="slider"></div>');
index.html
<a href="#" id="load">Click</a>
<div id="foobar">
<div class="slider"></div>
</div>
我认为这与将滑块添加到未来元素相同。我查看了.delegate()
和.live()
,我无法让这些工作适合我的情况。有什么建议吗?
我正在寻找一种尽可能不引人注目地解决这个问题的方法。
答案 0 :(得分:0)
在ajax回调函数中,您可以告诉jquery ui恢复所有回调,就像您创建它们一样$('.sliders').slider();
或者,如果您要动态添加它们,您可以执行以下操作:
var $slider = $("<div class='slider'></div>");
$slider.slider();
$slider.appendTo("#sliders");
修改强> 试试这段代码:
$.getScript('load.js', function(){
$('.sliders').slider();
});
答案 1 :(得分:0)
我会这样做有点不同。让我知道您为什么或为什么不喜欢以下方法。
<强> core.js
强>
$(function() {
$('.slider').slider();
$('#load').click(function() {
$.ajax
(
url: 'load.html',//url for ajax call
//run function on success. the contents is passes as @param data or whatever you choose
success: function(data)
{
$('#foobar').html(data);//add to dom
//bind here
$('.slider').slider()//if this line doesnt work use delegate
}
});
});
<强> load.html
强>
<div class="slider"></div><div class="slider"></div>