ASP : CheckBox에 대한 OnClick 대 OnClientClick?


83

asp : CheckBox에 대한 클라이언트 측 자바 스크립트 핸들러가 asp : Button과 같이 OnClientClick = ""속성이 아닌 OnClick = ""속성이어야하는 이유를 아는 사람이 있습니까?

예를 들어 다음과 같이 작동합니다.

<asp:CheckBox runat="server" OnClick="alert(this.checked);" />

그리고 이것은 (오류 없음) :

<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />

그러나 이것은 작동합니다.

<asp:Button runat="server" OnClientClick="alert('Hi');" />

그리고 이것은 (컴파일 시간 오류) :

<asp:Button runat="server" OnClick="alert('hi');" />

(나는 Button.OnClick이 무엇인지 알고 있습니다. 왜 CheckBox가 같은 방식으로 작동하지 않는지 궁금합니다 ...)

답변:


106

그것은 매우 이상합니다. 나는 CheckBox 문서 페이지 를 확인했습니다.

<asp:CheckBox id="CheckBox1" 
     AutoPostBack="True|False"
     Text="Label"
     TextAlign="Right|Left"
     Checked="True|False"
     OnCheckedChanged="OnCheckedChangedMethod"
     runat="server"/>

보시다시피 OnClick 또는 OnClientClick 속성이 정의되어 있지 않습니다.

이것을 염두에두고 이것이 일어나고 있다고 생각합니다.

이렇게하면

<asp:CheckBox runat="server" OnClick="alert(this.checked);" />

ASP.NET은 OnClick 특성을 수정하지 않고 브라우저에서 그대로 렌더링합니다. 다음과 같이 렌더링됩니다.

  <input type="checkbox" OnClick="alert(this.checked);" />

분명히 브라우저는 'OnClick'을 이해하고 경고를 표시합니다.

그리고이 시나리오에서

<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />

다시 말하지만 ASP.NET은 OnClientClick 특성을 변경하지 않고 다음과 같이 렌더링합니다.

<input type="checkbox" OnClientClick="alert(this.checked);" />

브라우저가 OnClientClick을 이해하지 못하므로 아무 일도 일어나지 않습니다. 또 다른 속성이므로 오류가 발생하지 않습니다.

렌더링 된 HTML을 보면 위에서 확인할 수 있습니다.

그리고 예, 이것은 전혀 직관적이지 않습니다.


좋은 전화. 난 그냥 생성 된 HTML을 확인하고 실제로는 체크 박스 입력 주위 범위로 이해하지 않는 속성을 넣어,하지만 그렇지 않으면 당신은 ... 맞아
Stobor

그것은 또 다른 것입니다. asp : checkbox가 불필요하게 추가 범위를 렌더링한다는 사실이 마음에 들지 않습니다.
SolutionYogi

1
글쎄, 그들 중 일부. onclick을 입력 자체에 넣지 만 onClientClick을 스팬에 넣습니다. 기묘한!
Stobor

와. 웹 컨트롤을 사용한 지 오래되어 기억이 희미 해졌습니다. 렌더링 된 HTML의 모양을 제어하고 싶기 때문에 HTML 컨트롤을 사용하는 것을 선호합니다.
SolutionYogi

2
이 문서는 실제로 .Net 1.1에서 가져온 것입니다. 내가 아는 한 ASP .Net에는 CheckBox에 대한 OnClick 서버 측 이벤트가 없으므로 OnClick 또는 OnClientClick을 작성할 때 알지 못하기 때문에 기본 동작이므로 작성한 내용을 정확하게 렌더링합니다. 내가 착각하지 않았다면)
Sergio Rosas

9

두 종류의 컨트롤이기 때문에 ...

웹 브라우저는 서버 측 프로그래밍에 대해 알지 못합니다. 자체 DOM과 사용하는 이벤트 모델에 대해서만 알고 있습니다. 그리고 렌더링 된 객체의 클릭 이벤트에 대해서도 알고 있습니다. ASP.Net에서 브라우저로 실제로 전송 된 최종 마크 업을 검사하여 차이점을 확인해야합니다.

<asp:CheckBox runat="server" OnClick="alert(this.checked);" />

렌더링

<input type="check" OnClick="alert(this.checked);" />

<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />

렌더링

<input type="check" OnClientClick="alert(this.checked);" />

이제 내가 기억할 수 있듯이 DOM에서 "OnClientClick"이벤트를 지원하는 브라우저는 어디에도 없습니다.

확실하지 않은 경우 브라우저로 전송되는 출력의 소스를 항상 확인하십시오. 볼 수있는 디버그 정보의 전 세계가 있습니다.



6

여기에 서버 측 OnClick 핸들러를 찾는 사람들에게는OnCheckedChanged


1
이것은 클라이언트 측 이벤트가 아니라 서버 측 이벤트입니다. 존재하지 않습니다.
수호자 1

1

경고 및 메시지를 정리하고 VS가 이에 대해 경고하는 것을 확인했습니다. 유효성 검사 (ASP.Net) : 속성 'OnClick'은 'CheckBox'요소의 유효한 속성이 아닙니다. html 입력 컨트롤을 사용하여 클라이언트 측 핸들러를 지정하면 추가 스팬 태그와 두 요소를 얻을 수 없습니다.


흥미 롭 네요 ... 그건 제가 한동안 맡은 프로젝트 였고 거기에서 유용한 것을보기에는 너무 많은 경고가있었습니다 ... 제가 올바르게 기억한다면, HTML 컨트롤을 사용하는 단점은 서버를 할 수 없다는 것입니다. -측면 조작 ...
Stobor

1

Asp.net CheckBox는 OnClientClick 메서드를 지원하지 않습니다.
asp : CheckBox에 자바 스크립트 이벤트를 추가하려면 서버 코드의 "Pre_Render"또는 "Page_Load"이벤트에 관련 속성을 추가해야합니다.

씨#:

    private void Page_Load(object sender, EventArgs e)
    {
        SomeCheckBoxId.Attributes["onclick"] = "MyJavaScriptMethod(this);";
    }

참고 : 페이지 머리글에 AutoEventWireup = "false"를 설정하지 마십시오.

VB :

    Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SomeCheckBoxId.Attributes("onclick") = "MyJavaScriptMethod(this);"
    End Sub

0

다음과 같이 태그를 수행 할 수 있습니다.

<asp:CheckBox runat="server" ID="ckRouteNow" Text="Send Now" OnClick="checkchanged(this)" />

호출 된 JavaScript의 .checked 속성이 정확합니다 ... 확인란의 현재 상태 :

  function checkchanged(obj) {
      alert(obj.checked)
  }

-2

한 가지 해결책은 JQuery를 사용하는 것입니다.

$(document).ready(
    function () {
        $('#mycheckboxId').click(function () {
               // here the action or function to call
        });
    }
);

Seconf 기능}이 없습니다
마흐디 jokar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.