我在不同的jquery移动页面上有元素,我使用动态修改这些元素值的脚本,问题是那些脚本是自动化的,我得到例外。:
Uncaught Error: cannot call methods on slider prior to initialization;
attempted to call method 'refresh'
当我使用这样的东西时:
$('#tsetpoint').val(value).slider('refresh');
我认为这是因为' #tsetpoint'当元素显示时,元素被修改,以解释场景:假设我有2个页面," main"和" not-main"。 '#tsetpoint'元素位于" not-main"页。
如果我使用" not-main"加载我的应用程序页面默认为" myapp.html#not-main",' #tsetpoint'元素得到了初始化,一切正常。
但如果我开始使用" myapp.html#main",那就没有元素' #tsetpoint'初始化,所以我得到了错误。
所以问题是如何初始化所有页面上的所有元素,jquery mobile,或者如何检查元素是否已初始化?
答案 0 :(得分:2)
首先,您无法初始化所有页面上的所有元素,这不是jQuery Mobile的工作原理,它会严重降低应用程序初始化速度。页面在显示之前已初始化。
此外,您无需检查元素是否已初始化以及是否存在此类函数。
您需要做的是学习jQuery Mobile页面事件以及如何仅在即将显示相应页面时触发滑块刷新。您将需要使用页面事件,这样您才能在某些特定页面初始化期间触发某些内容。
例如,此代码适用于jQuery Mobile 1.4.X版本:
$(document).on('pagebeforeshow', '#not-main', function(){
//put your code here
});
或者此代码适用于jQuery Mobile 1.4.X及更高版本。
$(document).on('pagecontainershow', function (e, ui) {
var activePage = $(':mobile-pagecontainer').pagecontainer('getActivePage').attr('id');
if(activePage === 'not-main') {
//put your code here
}
});
这样,只有在初始化特定页面内容时,您的代码才会执行。如果您想了解有关网页活动的更多信息,请阅读 this 回答。
另一方面,一些jQuery Mobile UI元素可以手动初始化,但我不知道它是否适用于滑块,尝试这样做:
$('#tsetpoint').val(value).slider().slider('refresh');
第一个滑块函数调用将初始化它,第二个将刷新它。