2012-03-05 47 views
2

我用下面的事件,并试图隐藏按钮,如果没有订单不等于-1元素显示和隐藏,然后jQuery Mobile的

$('#ordPage1').live('pageshow',function(event){ 
      //$('#btnRegisterVisit').hide();  
      //alert(sessionStorage.OrderNo); 
      if(sessionStorage.OrderNo!= -1){ 
       $('#btnRegisterVisit').hide(); 
       //alert("test"); 
      } 
      else{ 
       $('#btnRegisterVisit').show(); 
      } 
    }); 

但我的问题是,当加载页面,按钮出现然后立即消失。有没有办法根本不显示按钮。按钮显示在用户界面上,然后消失可能会导致问题,因为用户可能会点击它。

有人可以帮我一把。提前致谢。

+0

您尝试过** pageinit **事件吗?也许多一点代码cpuld会有用。 – maxijb 2012-03-05 08:43:24

+0

我试图pageinit和它有同样的效果。 PageCreate不会触发该事件。 – 2012-03-05 08:44:31

+0

我创建基于代码粘贴你的样品,它似乎是工作fine.Here是链路HTTP://jsfiddle.net/wGL3b/。所以别的东西可能是如果可能的话reason.Please张贴一些额外的代码。 – user700284 2012-03-05 09:39:30

回答

1

你可以在你的CSS文件中放入#btnRegisterVisit { display: none; }吗?

+0

没有dat没有工作。相反,它使按钮看起来很奇怪,没有背景只有带有轮廓的文本。 – 2012-03-05 09:00:03

0
<html> 
<head> 
    <style> 
    span { background:#def3ca; padding:3px; float:left; } 
    </style> 
    <script src="http://code.jquery.com/jquery-latest.js"></script> 
</head> 
<body> 
    <button id="hidr">Hide</button> 
    <button id="showr">Show</button> 
    <div> 

    <span>Once</span> <span>upon</span> <span>a</span> 
    <span>time</span> <span>there</span> <span>were</span> 
    <span>three</span> <span>programmers...</span> 

    </div> 
<script> 
    $("#hidr").click(function() { 
     $("span:last-child").hide("fast", function() { 
     // use callee so don't have to name the function 
     $(this).prev().hide("fast", arguments.callee); 
     }); 
    }); 
    $("#showr").click(function() { 
     $("span").show(2000); 
    }); 

</script> 
</body> 
</html> 
1

使用pageinit尝试,而不是

$(document).bind('pageinit', function(){ 
    if(sessionStorage.OrderNo!= -1){ 
      $('#btnRegisterVisit').hide(); 
      //alert("test"); 
    } 
    else{ 
      $('#btnRegisterVisit').show(); 
    } 
}); 

http://jquerymobile.com/test/docs/api/events.html

重要提示:使用的$(document).bind( 'pageinit'),而不是$(文件)。就绪()

您在jQuery中学到的第一件事就是调用$(document).ready()函数中的代码,以便在DOM加载后立即执行所有操作。然而,在jQuery Mobile的,阿贾克斯被用作导航到每一页的内容装入DOM和DOM准备处理程序只执行了第一页。要在加载并创建新页面时执行代码,可以绑定到pageinit事件。该事件在本页面的底部详细说明。

如果您已尝试pageinit,它不起作用。您也可以尝试使用pagebeforeshow

$('#ordPage1').live('pagebeforeshow',function(event){ 
     //$('#btnRegisterVisit').hide();  
     //alert(sessionStorage.OrderNo); 
     if(sessionStorage.OrderNo != -1){ 
      $('#btnRegisterVisit').hide(); 
      //alert("test"); 
     } 
     else{ 
      $('#btnRegisterVisit').show(); 
     } 
}); 

pagebeforeshow - 引发了“toPage”我们正转换到,实际过渡动画开工前。这个事件的回调将接收一个数据对象作为他们的第二个参数。

+0

谢谢!对于后人而言,我最终做的是将我的隐藏事件绑定到pagebeforeshow。事实上,事件是* *已经绑定到pagebeforeshow,但为了杀“忽悠”了我必须做的是移动的隐藏事件,这些方法的*顶部*。很显然,在这些调用之前执行的其他代码足以将呼叫延迟到足以在几分之一秒内显示按钮。我不能说它会适用于所有人,但如果您遇到同样的问题,请尝试一下。 – 2012-08-15 12:41:39

0

看看这个:

重要提示:使用的$(document).bind( 'pageinit'),而不是$(文件)。就绪()

找到了jQuery移动文档

0

将其绑定到pagebeforeshow事件。

$('#ordPage1').live('pagebeforeshow',function(event){ 
     //$('#btnRegisterVisit').hide();  
     //alert(sessionStorage.OrderNo); 
     if(sessionStorage.OrderNo!= -1){ 
      $('#btnRegisterVisit').hide(); 
      //alert("test"); 
     } 
     else{ 
      $('#btnRegisterVisit').show(); 
     } 
});