2013-01-22 3 views
1

ASP.NET C# 응용 프로그램에서 간단한 jquery-ui 모달 대화 상자를 삭제 확인으로 사용하려고합니다. 전에 여러 번 해본 적이 있지만,이 응용 프로그램에서 어떤 이유로 인해 오작동합니다. 대화 상자가 나타나면 "Yes"또는 "No"를 클릭하기 전에 즉시 사라집니다. 내가 (AN 컨트롤의 OnClientClick에서) 확인 기능을 사용하고 여기 어디에jquery-ui 모달 대화 상자가 열리는 즉시 사라지는 이유는 무엇입니까?

<script type="text/javascript" src="/resources/jquery-1.8.2.min.js"></script> 
    <script type="text/javascript" src="/resources/jquery-ui-1.9.1.custom.min.js"></script> 

    <link rel="stylesheet" type="text/css" href="/resources/ui-lightness/jquery-ui-1.9.1.custom.css" /> 

    <script type="text/javascript"> 
     var remConfirmed = false; 
     function ConfirmRemoveDialog(obj, title, dialogText) { 
      if (!remConfirmed) { 
       //add the dialog div to the page 
       $('body').append(String.Format("<div id='confirmRemoveDialog' title='{0}'><p>{1}</p></div>", title, dialogText)); 
       //create the dialog 
       $('#confirmRemoveDialog').dialog({ 
        modal: true, 
        resizable: false, 
        draggable: false, 
        close: function(event, ui) { 
         $('body').find('#confirmRemoveDialog').remove(); 
        }, 
        buttons: 
        { 
         'Yes, remove it': function() { 
          $(this).dialog('close'); 
          remConfirmed = true; 
          if (obj) obj.click(); 
         }, 
         'No, keep it': function() { 
          $(this).dialog('close'); 
         } 
        } 
       }); 
      } 

      return remConfirmed; 
     } 

     //String.Format function (since Javascript doesn't have one built-in 
     String.Format = function() { 
      var s = arguments[0]; 
      for (var i = 0; i < arguments.length - 1; i++) { 
       var reg = new RegExp("\\{" + i + "\\}", "gm"); 
       s = s.replace(reg, arguments[i + 1]); 
      } 
      return s; 
     } 
    </script> 

것 : 여기에 관련 코드 (자바 스크립트)의

<asp:Button ID="btnRemoveProgram" runat="server" Text="Remove" CausesValidation="false" OnClientClick="ConfirmRemoveDialog(this, 'Please confirm removal', 'Are you sure you wish to remove the selected Program? This cannot be undone.');" /> 

내가, 내가 성공적으로 사용했습니다 말했듯 여러 번 전에이 동일한 구조 (거의 동일한 코드); 왜 지금 작동하지 않는지 나는 모른다. 어떤 아이디어라도 대단히 감사하겠습니다. 저는 정말이 문제에 난처합니다.

+0

콘솔에 아무것도 나타나지 않습니다. – timbck2

+0

그것은 나를 위해 작동합니다 : http://jsfiddle.net/MjYtQ/ 어쩌면 당신은'false'를 반복해야합니다'>'OnClientClick = "return ConfirmRemoveDialog (t ...' –

답변

1

당신은 return 버튼을 호출자에게 remConfirmed해야합니다. 버튼에서 다음을 수행하십시오.

OnClientClick="return ConfirmRemoveDialog(/* the rest of the code */);" 
+0

이제 대화 상자가 계속 켜져있을 때와 같이 작동합니다. "아니요"를 클릭하지만 "예"를 클릭하면 대화 상자가 사라지지만 아무 일도 발생하지 않습니다. "OnClientClick"외에도 "OnClick"이벤트가 필요한가요?'if (obj) obj.click ();'나를 돌봐 줬어. 편집 : 버튼에 서버 측 "OnClick"이벤트를 추가하고 문제를 해결했습니다. 고마워요! – timbck2

+0

그냥 'true'를 반환하면 예상대로 수행해야합니다. 'click '에 대한 또 다른 호출을하는 대신에. –

2

runat="server"은 서버에서 이벤트를 수행하기 위해 다시 게시해야한다는 버튼을 알려줍니다. OnClientClick은 클라이언트 측에서 실행되기 전에 대화 상자가 표시되고 즉시 페이지 게시물이 표시되어 대화 상자가 사라집니다.

문제는 모달 대화 상자가 일반적인 창 의미에서 모달이 아니라는 점입니다. 자바 스크립트가 계속됩니다. 가장 간단한 테스트는 돌아 오기 전에 경고를 추가하는 것입니다. 대화 상자가 표시된 직후 팝업이 표시됩니다.

이 문제를 해결하려면 항상 return false을 OnContentClick에 입력하고 예/아니오 버튼 이벤트 처리기에서 __doPostback javascript method을 사용하십시오.

+0

그것은 단지 클라이언트 측 버튼이 아닙니다 - 모달 대화 상자에서 "예"를 클릭하면 버튼의 "클릭"이벤트 서버 측을 수행해야합니다. – timbck2

+0

@ timbck2 내 업데이트보기 –

관련 문제