jQuery mobile初始化所有元素

时间:2014-09-03 08:05:01

标签: javascript html jquery-mobile

我在不同的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,或者如何检查元素是否已初始化?

1 个答案:

答案 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'); 

第一个滑块函数调用将初始化它,第二个将刷新它。