2013-08-25 20 views
6

Ich benutze jQuery mobile 1.9.1 min auf PhoneGap.
Ich habe eine Liste, wo jeder Iten auf Klick öffnet ein Popup-Aktionen:jQuery mobile Popup öffnen von Popup

function showActions(index){ 
    selectedIndex = index; 
    $("#actionPopup").popup("open", {positionTo: '#list li:nth-child('+ index +')'}); 
} 
<div data-role="popup" id="actionPopup" data-overlay-theme="a"> 
    <a href="#" data-rel="back" data-role="button" data-theme="a" data-icon="delete" data-iconpos="notext" class="ui-btn-right">Close</a> 
     <ul data-role="listview"> 
       <li data-role="divider">Actions</li> 
       <li data-icon="false" onclick="showDetails();">action1</li> 
       <li data-icon="false">action2</li> 
       <li data-icon="false">action3</li> 
       <li data-icon="false">action4</li> 
      </ul> 
     </div> 

Wenn ich auf action1 drücken mit showDetails() ihnen Methode aufgerufen wird, aber das zweite Popup wird nicht angezeigt.

function showDetails(){ 
    console.log("showDetails"); 
    $("#infoPopup").popup("open"); 
} 
<div data-role="popup" id="infoPopup"> 
      <a href="#" data-rel="back" data-role="button" data-theme="a" data-icon="delete" data-iconpos="notext" class="ui-btn-right">Close</a> 
      <div id="infoContent"> 
       <table> 
        <tr id="eventcode"> 
         <td>test1:</td> 
         <td>&nbsp;</td> 
        </tr> 
        <tr id="eventtype"> 
         <td>test2:</td> 
         <td>&nbsp;</td> 
        </tr> 
       </table> 
      </div> 
     </div> 

Was kann ich tun?

Antwort

10

Meine Lösung

$.mobile.switchPopup = function(sourceElement, destinationElement, onswitched) { 
    var afterClose = function() { 
     destinationElement.popup("open"); 
     sourceElement.off("popupafterclose", afterClose); 

     if (onswitched && typeof onswitched === "function"){ 
      onswitched(); 
     } 
    }; 

    sourceElement.on("popupafterclose", afterClose); 
    sourceElement.popup("close"); 
}; 
1

Es scheint, dass die Verkettung von Popups nicht possible ist.

Die Lösung:

$(document).on("pageinit", function() { 
    $('.popupParent').on({ 
     popupafterclose: function() { 
      setTimeout(function(){ $('.popupChild').popup('open') }, 100); 
     } 
    }); 
}); 
1

ich diesen Code verwendet Popup wechseln von Popup, um es funktioniert gut.

function switchpop() 
{ 
    $('#popupMenu').popup('close'); 
    $("#popupMenu").bind({popupafterclose: function(event, ui) 
      { 
       $("#notes").popup("open"); 
      } 
      });     
} 
3

habe ich diese einfache Funktion für die Work-around:

function myPopup(myPage) { 
    history.back(); 
    setTimeout(function() { 
     $(myPage).popup('open'); 
    }, 100); 
} 
0

Nach vier Stunden mit diesem Kampf ich das Problem auf diese reduziert:

Dies ist in einem Klick Funktionstaste auf dem ersten Popup

$('#popupCall').popup('close'); 

    window.setTimeout(function() { $('#popupContact').popup('open') }, 50); 
3

@Rakoo hat eine nette Antwort. Hier ist eine schlankere Version:

$.mobile.switchPopup = function(sourceElement, destinationElement, onswitched) { 
    sourceElement.one("popupafterclose", function() { 
     destinationElement.popup("open") 
     !onswitched || typeof onswitched !== "function" || onswitched() 
    }).popup("close") 
}; 

Wenn Sie nicht über die onswitched Funktion benötigen und fügen es nicht zu $ ​​.mobile, es kann diese kurz und einfach sein:

$('#popup1').one("popupafterclose", function(){$('#popup2').popup("open")}).popup("close")