将 jQuery UI 滑块添加到未来元素的最有效方法是什么?

发布于 2024-12-09 20:35:59 字数 726 浏览 0 评论 0原文

目前,我正在使用 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() ,但我无法让它们适合我的情况。有什么建议吗?

我正在寻找一种尽可能不引人注目地解决这个问题的方法。

Currently, I am reloading a section of my site with AJAX which has sliders from jQuery UI. Those sliders are not reloaded because in my javascript, they are only loaded on 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>

I suppose this would be the same as adding sliders to future elements. I've looked at .delegate() and .live() and I can't get those to work for my situation. Any suggestions?

I am looking for a way to solve this as unobtrusively as possible.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蓝天白云 2024-12-16 20:35:59

在 ajax 回调函数中,您可以告诉 jquery ui 恢复所有回调,就像您创建它们一样 $('.sliders').slider();
或者,如果您要动态添加它们,您可以执行以下操作:

var $slider = $("<div class='slider'></div>");
$slider.slider();
$slider.appendTo("#sliders");

我的示例的 JS Fiddle 链接

编辑:
试试这个代码:

$.getScript('load.js', function(){
  $('.sliders').slider();
});

In the ajax callback function you can tell jquery ui to reinstate all callbacks just like you created them $('.sliders').slider();
Or if you are adding them dynamically you can do something like this:

var $slider = $("<div class='slider'></div>");
$slider.slider();
$slider.appendTo("#sliders");

JS Fiddle link for my example

Edit:
Try this code:

$.getScript('load.js', function(){
  $('.sliders').slider();
});
鯉魚旗 2024-12-16 20:35:59

我会采取一些不同的做法。让我知道您为什么或为什么不喜欢以下方法。

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>

I would do this a little differently. let me know why or why not you prefer the following method.

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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文