【发布时间】:2012-06-26 13:38:56
【问题描述】:
我有一个名为 search.html 的 html 页面,其中包含滑块,它们在此页面中完美运行。
我正在尝试使用 jQuery .load() 函数将此页面加载到另一个页面(我的主页)。
我从search.html中删除了滑块初始化,并将其放在主页面的load()回调函数中,以便在通过AJAX设置的DOM准备好后执行,如下:
$("#display_area").load("search.html","",function(response,status,xhr){
//#display_area is a div
$( "#sliderprice" ).slider({ max: 1000 },{ step: 10 });
//#sliderprice is a div
})
我的 jQuery 和 jQuery UI 的 JS 脚本包含在 search.html 页面和主页的头部。
当我加载主页时,有时,滑块可以正常工作,但有时它根本不工作(不初始化),当这种情况发生时,萤火虫的错误控制台显示: $("#sliderprice").slider 不是函数
我所做的只是刷新页面,有时可以,有时不行。
我想解决这个问题,让它一直有效。任何帮助将不胜感激。
【问题讨论】:
-
你试过 $(document).ready(function() {}); ??
-
是的,这听起来像是加载顺序错误。使用上述建议可能会纠正这一点。
-
如果您的意思是将代码留在 search.html 页面中并将其放在 $(document).ready() 中,这是行不通的。 $(document).ready() 在通过 .load() 调用时永远不会触发。但是,如果您的意思是在主页中,我通过调试知道,当调用该函数时,DOM 已准备好,但它无法识别该函数。
-
加载回调函数在jQuery API中是这样描述的:“如果提供了“完成”回调,则在后处理和HTML插入完成后执行。”所以,里面的代码回调函数,仅在 HTML 插入完成后启动(新 DOM 准备就绪)。 $(document).ready() 不需要 $(document).ready() 除了 $(document).ready() 只触发一次,它不会在新的更改后再次触发。
-
setTimeout(function(){ // slider stuff }, 300);应该修复它。
标签: jquery-ui jquery jquery-ui-slider jquery-load