programing

OnClick vs OnClient asp를 클릭합니다.체크박스?

lastmoon 2023. 6. 26. 21:35
반응형

OnClick vs OnClient asp를 클릭합니다.체크박스?

asp에 대한 클라이언트 측 Javascript 처리기가 왜 그런지 아는 사람?CheckBox는 다음과 같이 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');" />

(나는 어떤 버튼인지 알아요.OnClick은 다음을 위한 것입니다. CheckBox가 동일하게 작동하지 않는 이유가 궁금합니다.

그것은 매우 이상합니다.다음과 같은 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);" />

브라우저가 OnClient를 이해하지 못하므로 클릭하면 아무 일도 일어나지 않습니다.또한 다른 속성이기 때문에 오류가 발생하지 않습니다.

당신은 렌더링된 HTML을 보고 위의 내용을 확인할 수 있습니다.

네, 이것은 전혀 직관적이지 않습니다.

그것들은 두 가지 다른 종류의 제어장치이기 때문에...

아시다시피, 웹 브라우저는 서버 측 프로그래밍에 대해 알지 못합니다.자신의 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" 이벤트를 지원하는 브라우저는 없습니다.

의심스러운 경우 항상 출력이 브라우저로 전송될 때 출력 소스를 확인합니다.디버그 정보의 전 세계를 볼 수 있습니다.

당신이 옳습니다. 이것은 일관성이 없습니다.CheckBox에는 서버 측 OnClick 이벤트가 없으므로 마크업이 브라우저에 렌더링됩니다.http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox_events.aspx

Button에는 OnClick이 있지만 ASP.NET에는 OnClick 마크업의 이벤트에 대한 참조가 필요합니다.

서버 쪽을 찾아 오신 분들을 위해 OnClick은 핸러그것은입니다.OnCheckedChanged

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

Asp.net CheckBox 지 OnClient 클릭합니다.
를 aspjavascript에 합니다.CheckBox 서버 코드의 "Pre_Render" 또는 "Page_Load" 이벤트에 관련 속성을 추가해야 합니다.

C#:

    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

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

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

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

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

모든 확인란에 기능을 할당한 후 확인을 요청할 수 있습니다.예를 선택한 경우 확인란을 변경할 수 있습니다. 확인란이 없으면 변경할 수 있습니다.

저의 경우에도 ASP를 사용하고 있습니다.자동 포스트백=이 있는 리피터(또는 그리드) 내부의 Net 확인란True" 속성이므로 서버 측에서는 제출된 값과 현재 db에 있는 값을 비교하여 선택한 확인 값이 "yes"인 경우에만 db를 업데이트해야 합니다.

$(document).ready(function () {
    $('input[type=checkbox]').click(function(){                
        var areYouSure = confirm('Are you sure you want make this change?');
        if (areYouSure) {
            $(this).prop('checked', this.checked);
        } else {
            $(this).prop('checked', !this.checked);
        }
    });
}); 


<asp:CheckBox ID="chk" AutoPostBack="true" onCheckedChanged="chk_SelectedIndexChanged" runat="server" Checked='<%#Eval("FinancialAid") %>' />

protected void chk_SelectedIndexChanged(Object sender, EventArgs e)
{
    using (myDataContext db = new myDataDataContext())
    {
        CheckBox chk = (CheckBox)sender;
        RepeaterItem row = (RepeaterItem) chk.NamingContainer;            
        var studentID = ((Label) row.FindControl("lblID")).Text;
        var z = (from b in db.StudentApplicants
        where b.StudentID == studentID
        select b).FirstOrDefault();                
        if(chk != null && chk.Checked != z.FinancialAid){
            z.FinancialAid = chk.Checked;                
            z.ModifiedDate = DateTime.Now;
            db.SubmitChanges();
            BindGrid();
        }
        gvData.DataBind();
    }
}

하나의 솔루션은 JQuery를 사용하는 것입니다.

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

언급URL : https://stackoverflow.com/questions/1135134/onclick-vs-onclientclick-for-an-aspcheckbox

반응형