Jquerymobile在pageinit上提醒2次

时间:2012-10-25 07:31:36

标签: jquery jquery-mobile

在我的页面加载中,我从jqm获得2个警报。我的代码有什么问题吗?

我的代码:

 $(document).bind('pageinit', function () {

alert('hi') // alerts 2 times...

        if(navigator.platform.indexOf("iPhone") != -1){
           $('div.video-holder span ').hide();
        }

    $('a[href="#"], a.disabled').bind('click touchstart',function (e) {
       e.preventDefault();
    } );

    if($(' #task-1,#task-2').length){
        candidateAccordion($('.candidate-list'));    
    }
    if($('#task-3').length || $('#task-4').length){
        taskSelector($('#task-3,#task-4'));//only for tast list selection
    }
    if($('video').length){
        $('.video-holder').each(function(num,element) {
            videoProcess($(element));
        });
    }
    if($('#task1-candSelected').length){
        candidateUpdate($('#task1-candSelected'));
    }

    if($('#task2-results').length){
        task2ResultProcess();
    }

    if($('#task3-results').length){
        task3ResultProcess();
    }
    if($('#task4-results').length){
        task4ResultProcess();
    }
    if($('#scoredUptoFinal').length){
        scoredUptoFinal();
    }

} )

3 个答案:

答案 0 :(得分:1)

如果您的警报触发两次,则该事件将被触发两次。

如何将event添加到函数参数并对其进行安慰:

$(document).bind('pageinit', function (event) {

   console.log( event )

   ...

这可以为您提供有关正在发生的事情的一些信息。

pageinit上有很多关于SO的问题(比如here),所以也许他们也可以指出你的解决方案。

我也遇到了多个pageinit事件触发的问题。在第一次触发后,我通常会在lock-up页面执行此操作:

$(document).bind('pageinit', function() {
    if ( !$('html').hasClass("mv-on") ){
        $('html').addClass("mv-on");
        // trigger my stuff
        }
    });

这样,pageinit将为整个DOM运行ONCE。您还可以通过在pageinit事件被触发的情况下向页面添加类或属性来使用它来锁定页面。

此外,请确保pageinit是绑定/处理程序的正确事件。我经常尝试在pageinit上设置内容,比如按类绑定到一个元素,当我尝试绑定的类尚未插入到DOM中时。我现在经常和pagebeforeshow一起去,因为那时我确信所有背景都已完成。但这仅仅是一种推理。

答案 1 :(得分:0)

你有多页模板吗?可能是你有两个pages使用相同的ID。 JQM加载第一个出现的页面,因此会加载它两次。

也可能与this JQM git issue request中指出的问题有关。

另请查看this chart,非常了解JQM触发的事件顺序。

答案 2 :(得分:-1)

您不应该使用pageinit事件绑定到document,您是否可以尝试只显示一个页面

例如, $("#yourpageId").bind('pageinit', function () {...}