0

모바일 장치 브라우저에서만 렌더링 할 때 ModalPopupExtender에 문제가 있습니다. 내 응용 프로그램은 사용자가 tapp/drag로 타임 슬롯을 선택해야합니다. 드래그를 멈추면 대화 상자가 나타나 시간 선택을 확인합니다. 그런 다음 사용자가 확인을 클릭하여 시간을 등록하거나 취소합니다. 문제는 모바일 브라우저에서이 페이지를 사용할 때 사용자가 헤더보기에서 아래로 스크롤하고 시간을 선택하면 대화 상자가 열리고 (배경 블록) 머리글에 가운데 머물러 있기 때문에 사용자가 위로 스크롤해야합니다. 확인 또는 취소 할 수 있습니다. 모바일 화면 크기가 아닌 모든 브라우저에서 MobiOne 에뮬레이터 &을 실행할 때 스크립트 기능을 확인할 수 있습니다. 대화 상자가 맨 위에 고정되어 있으므로 내 CSS라고 확신합니다. 각 장치가이 같은 .CSS 섹션을 가지고, 그래서 제가 장치 검색에 대한 WURFL 라이브러리를 사용하여 내 설치 ...ModalPopupExtender 모바일 위치 지정

을 설명하게 ..

@media screen and (max-width: 320px) { 
/* styles: iPhone3 portrait, */ 

    .rPanel 
    { 
    background-color: red; 
    border: 1px solid black; 
    padding:4px 4px 4px 4px;  
    } 
} 
@media screen and (max-width: 480px) { 
/* styles: iPhone3 landscape, android nexus portrait*/ 

    .rPanel 
    { 
    background-color: green; 
    border: 1px solid black; 
    padding:4px 4px 4px 4px;  
    } 
} 

가 여기 내 패널과 ModelPopupExtender입니다. rPanel은 div = 대화 상자입니다. 사용자가 시간 슬롯을 선택하고, 값이로드 된 후 modalExt는 ...

<asp:UpdatePanel ID="updatePanel" class="updatePanel" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <div runat="server" id="ruleViolationsMsg" class="rulePanel"> 
      <asp:Label ID="ErrorHeader" runat="server" CssClass="ErrorHeader"></asp:Label> 
      <br /> 
      <asp:PlaceHolder ID="errorMsgControls" runat="server" /> 
     </div> 
     <asp:Button ID="ruleModalBtn" runat="server" Style="display: none;" /> 
     <asp:Button ID="ruleModalCloseBtn" runat="server" Text="" Style="display: none;" /> 
     <div id="rPanel" class="rPanel" runat="server" style="display: none;"> 
      <table> 
       <tr> 
        <th id="tableTh" runat="server" colspan="2" class="tableTh"> 
         Confirm Reservation 
        </th> 
       </tr> 
       <tr> 
        <td colspan="2"> 
         <asp:Label ID="errorMsg" runat="server" Visible="false" /> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         <label for="selectedResource" class="label"> 
          Resource: 
         </label> 
        </td> 
        <td> 
         <asp:Label ID="selectedResource" runat="server" /> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         <label for="selectedDate" class="label"> 
          Date: 
         </label> 
        </td> 
        <td> 
         <asp:Label ID="selectedDate" runat="server"></asp:Label> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         <label for="startTime" class="label"> 
          Start Time: 
         </label> 
        </td> 
        <td> 
         <asp:Label ID="startTime" runat="server" /> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         <label for="endTime" class="label"> 
          End Time: 
         </label> 
        </td> 
        <td> 
         <asp:Label ID="endTime" runat="server" /> 
        </td> 
       </tr> 
       <tr>      
        <td> 
         <asp:Button ID="cancel" runat="server" Text="Cancel" CssClass="submit" OnClick="cancel_Click" /> 
         <asp:Button ID="reserve" runat="server" Text="Reserve" CssClass="submit" OnClick="reserve_Click" UseSubmitBehavior="true" /> 
        </td> 
       </tr> 
      </table> 
     </div> 
     <asp:Button ID="progressBtn" runat="server" OnClientClick="progressBtn();" Style="display: none;" /> 
     <asp:Button ID="progressCloseBtn" runat="server" Text="" CssClass="progressBtn" Style="display: none;" /> 
     <div id="progressPanel" class="progressPanel" style="display: none"> 
      <label class="progressText"> 
       Please wait...</label> 
      <div id="progress" class="progress"> 
      </div> 
      <div id="progressDiag" class="progressDialog"> 
      </div> 
     </div> 
     <asp:HiddenField ID="reservationStatus" Value="0" runat="server" /> 
     <asp:ModalPopupExtender ID="progressModal" runat="server" TargetControlID="progressBtn" 
      PopupControlID="progressPanel" BackgroundCssClass="modalPopup" CancelControlID="progressCloseBtn" 
      BehaviorID="progressModal" > 
     </asp:ModalPopupExtender> 
     <asp:GridView ID="reservegrid" runat="server" CssClass="reserveGrid" AutoGenerateColumns="true" 
      OnRowDataBound="reservegrid_RowDataBound" HeaderStyle-CssClass="gridHeader" HorizontalAlign="center"> 
     </asp:GridView> 
     <asp:HiddenField ID="sRes" runat="server" EnableViewState="true" /> 
     <asp:ModalPopupExtender ID="modalExt" runat="server" TargetControlID="dummyModal" 
      BackgroundCssClass="modalPopup" CancelControlID="dummyModal" PopupControlID="rPanel" 
      BehaviorID="md" /> 
     <asp:Button ID="dummyModal" runat="server" Text="" Style="display: none;" CausesValidation="false" /> 
     <asp:HiddenField ID="rSelected" runat="server" /> 
     <asp:HiddenField ID="rStart" runat="server" /> 
     <asp:HiddenField ID="rEnd" runat="server" /> 
     <asp:HiddenField ID="rLastSlot" runat="server" Value="0" /> 
     <asp:HiddenField ID="rCompleted" runat="server" Value="0" /> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="reserve" EventName="Click" /> 
     <asp:AsyncPostBackTrigger ControlID="cancel" EventName="Click" /> 
     <asp:AsyncPostBackTrigger ControlID="ruleModalBtn" EventName="Click" /> 
    </Triggers> 
</asp:UpdatePanel> 

관련 증량제이며, 내 JQuery와는 launchModal() 호출 ..

$('input[id$="rCompleted"]').val("0"); 
          launchModal(); 

launchModal은 (behaviorID 내 "(MD) 도시 값 확장) 대화 ...

launchModal = function() { 
     $find('md').show();   
    }; 

에 내가 말했듯이 AJaxControlKit ModalPopupExtender 앵커가, 그 그냥 모바일에 나를 위해 작동하지 않는 때문에 배포 아직는 "스티커"대화 익스텐더를 가지고있다. jquery UI 대화 상자 "고정"익스텐더를 사용하여이 작업을 수행 하시길 권장합니까? 내 앵커 문제를 해결할 수 있습니까? 이 증량제를 배치하는 "가장 좋은"방법은 무엇입니까? ModalPopupExtender를 모두 제거합니까?

그렇지 않은 경우 어떻게 대화 상자를 클릭 위치에 고정 시키지만 대화 상자가 항상 표시되도록 스크롤 할 수있게 할 것을 권장합니까? 도움을 주셔서 감사합니다. Chris

답변

0

검색을 한 후 내 문제에 대한 해결책을 찾았습니다. ModalPopupExtender은 머리와 형태의 태그가 페이지에

  1. .. 그래서 당신은 다음을 수행해야 적절하게 배치 할 수있는 대화 상자를 얻기 위해 인터넷하지만 모바일 순전히위한 것입니다 (나는 Mobile.Master 페이지를 사용) head 섹션에 다음 스크립트를 추가하십시오. "var x = null; var y = null;"을 유지해야합니다. jarser 블록의 바깥 쪽에서 전역 변수를 유지하려면 ...

    var x = null; var y = null;
    jQuery(function ($) { 
    
        // Bind the mouse event to the document so that we 
        // can see what kind of coordinates we have to play 
        // with. 
        $(document).click(
         function (event) { 
    
          // Client variables. 
    
          //console.log("clientX/Y: " + event.clientX + ", " + event.clientY); 
    
          // Page variables. NOTE: These are the ones 
          // that are officially supported by the 
          // jQuery Event object. 
    
          console.log("pageX/Y: " + event.pageX + ", " + event.pageY); 
    
          x = event.pageX; 
          y = event.pageY; 
    
          //try this if its not centering 
          //var offset = $('#updatePanel').offset(); 
          //x = event.pageX - offset.left; 
          //y = event.pageY - offset.top; 
    
         }); 
        }); 
    
  2. 개봉 모달의 부모로 패널 또는 업데이트 패널을 사용하는 경우, 부모를 "상대"위치를 설정하는 클래스를 지정 ...

    ASP : UpdatePanel ID = "updatePanel"RUNAT = "서버"CssClass = "reserve_UpdatePanel"의 UpdateMode = "조건"

    .reserve_UpdatePanel {
    총수 : 상대;

  3. 내 .aspx 페이지에서 일부 스크립트를 보유하고있는 하단에 "asp : content"(AjaxControlToolkit) 태그를 만들었습니다. 이 스크립트 블록을 추가하십시오. 페이지로드가 저를 위해 작동하지 않았으므로 "Sys.Application"에서 "modalInit()"을 초기화했습니다. 이 줄을 스크립트 태그의 맨 위에 추가하십시오. "Sys.Application.add_load (modalInit);" "modalInit"에서 내 ModalPopupExtender의 behaviorId를 찾은 다음 onload에서 ModalPopupExtender에 "onShowing()"을 추가합니다. "onShowing()"은 내 modal "div"id (내 updatePanel의 자식이며 Extender의 PopupControlId 임)를 가져 와서 내 위치에서 전역으로 설정된 mouseevent 좌표를 사용하여 ModalPopupExtender의 기본 좌표를 무시하도록 setlocation을 수행합니다. 마스터 페이지. 짧게 말하면, 클릭하면 대화 상자가 열립니다.

    Sys.Application.add_load (modalInit);
    function modalInit() { 
        var modalPopup = $find('md'); 
        modalPopup.add_shown(onShowing); 
    } 
    
    function onShowing() { 
    
        $common.setLocation($get("<%=rPanel.ClientID %>"), new Sys.UI.Point(x, y)); 
    } 
    
0

jQuery 모바일 팝업을 사용하는 것이 가장 좋습니다. 1.1.2 베타 버전에 포함되어 있지만, 곧 출시 될 예정입니다. 팝업 출처, 양식 등을 설정할 수 있습니다.

나는 1.1.2 데모 페이지를 찾을 수 없지만 demo of 1.2.0 pre을 볼 수 있습니다. 1.1.2의 출시는 며칠 째이며, 이미 jQuery Mobile download builder에서 다운로드 할 수 있습니다.