2011-09-28 2 views
0

ASP.Net 페이지에서 IE에만 ​​문제가 있습니다. 여기에 설명이 있습니다.JS가 클릭 버튼을 호출 한 후 IE가 페이지를 새로 고치지 않는 이유는 무엇입니까?

페이지에는 두 개의 버튼과 레이블이 있습니다. 첫 번째 버튼이 표시되고 click 이벤트에서 JS 함수를 호출합니다. 이 JS 함수는 두 번째 버튼의 클릭 기능을 호출합니다. 두 번째 단추에는 click 이벤트에 대한 C € 이벤트 핸들러가 있습니다. C# 이벤트 처리기에서 레이블을 편집합니다.

Firefox에서 : 레이블을 클릭하면 올바르게 편집됩니다. IE (8)에서 : C € 이벤트 처리기가 제대로 눌려 졌음에도 불구하고 레이블이 편집되지 않았습니다. 를 Page_Load button2_OnClick => 레이블 텍스트의 변화 가를 Page_Load => 레이블 텍스트 리셋 :(

:

또한, I는 Page_Load 이벤트가 두 번 JS 버튼을 클릭 한 후 호출되어, IE에서 관찰 파이어 폭스에서

,를 Page_Load 한 번만이라고

내 질문은 다음과 같습니다.? 파이어 폭스는 JS 버튼 후 클릭 않기 때문에 IE가 제대로 페이지를 새로 만드는 방법을 아래

샘플 테스트 코드입니다 :

1) 페이지 ASPX 코드 숨김

<head runat="server"> 
    <title></title> 
    <script type="text/javascript"> 
     function button1Click(sender, args) { 
      var button2 = document.getElementById("button2"); 
      button2.click(); 
     } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Button runat="server" ID="button1" Text="Click-me!" OnClientClick="button1Click();" /> 
     <asp:Button runat="server" ID="button2" Text="Second" OnClick="button2_OnClick" style="display:none" /> 
     <p /> 
     <asp:Label runat="server" ID="label1" Text="Init" /> 
    </div> 
    </form> 
</body> 
</html> 

2) C 번호 :

가 렌더링 때 당신의 버튼의 ID가 단추 1 또는 단추 2되지 않습니다
public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected void button2_OnClick(object sender, EventArgs e) 
    { 
     label1.Text = "Changed"; 
    } 
} 

답변

1

. 아마 ctl001_button1과 같은 것이 될 것입니다. 따라서 귀하의 자바 스크립트가 작동하지 않습니다. ASP.NET 4에서는 할당 된 ClientID을 사용하여이 동작을 무시할 수 있습니다. 여담으로

<asp:Button runat="server" ID="button1" Text="Click-me!" 
      OnClientClick="button1Click();" ClientIDMode="Static" /> 
    <asp:Button runat="server" ID="button2" Text="Second" 
      OnClick="button2_OnClick" style="display:none" ClientIDMode="Static" /> 

, 이것은 ASP.NET 윈폼과 주요 문제에 암시 - 그것은 트릭 개발자 웹이 연결된 환경을 생각으로.

기본적으로 <asp:Button /> 요소를 클릭하면 포스트 백이 호출됩니다. 나는. 브라우저가 서버에 새 페이지를 요청합니다. 그것은 ViewState이라는 것을 전송하는데, 이것은 서버가 사용자가 수행 한 작업과 렌더링 할 작업을 알고있는 방법입니다. 그처럼 처리 된 "이벤트"는 없습니다.

+0

ASP.Net 3.5를 사용하고 있으므로 사용할 수 없습니다. 또한 button1과 button2는 ctl001_button1과 같은 것이 아니라 최종 클라이언트 페이지에서 동일한 ID로 렌더링됩니다. – WolveFred

+0

첫 번째 게시물에 흥미로운 정보를 추가했습니다. "또한 IE에서 JS 버튼을 클릭 한 후 Page_Load 이벤트가 두 번 호출된다는 것을 관찰했습니다 [...]". – WolveFred

+0

'button1Click()'메소드에'return false'를 넣어보세요. –

1

나는 문제가 당신이 버튼을 브라우저에서 렌더링 후

var button2 = document.getElementById("button2"); 

어쩌면

var button2 = document.getElementById("<%= button2.ClientID %>"); 

로 변경 숨겨진 버튼을 얻으려고 노력하는 방법과 생각의 ID입니다 ASP.Net 엔진에 의해 변경되었으며 귀하의 출처와 동일하지 않습니다. 이 도움이

http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientid.aspx

희망.

+0

그게 나쁜 생각은 아니지만 button2가 이미 올바르게 검색되었고 click 메소드가 올바르게 호출 되었기 때문에 문제가 해결되지 않았습니다. – WolveFred

+0

** Doh **, 이전 게시물의 업데이트를 읽었습니다. 하지만 첫 번째 버튼은 asp.net 컨트롤이 왜 나를 귀찮게하는지, 정말로 HTML 입력 버튼으로 바꾸고 거기에서 javacript를 호출해야합니다. – Sitnam

+0

성취하려고하는 것이 정확히 무엇입니까? – Sitnam

관련 문제