OnClick vs OnClientClick για asp: CheckBox;

ψήφοι
81

Ξέρει κανείς γιατί ένα client-side Javascript για χειριστή για asp: CheckBox πρέπει να αποτελεί onclick = «» χαρακτηριστικό και όχι ένα OnClientClick = «» χαρακτηριστικό, όπως για asp: Button;

Για παράδειγμα, αυτό λειτουργεί:

<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 δεν λειτουργούν με τον ίδιο τρόπο ...)

Δημοσιεύθηκε 16/07/2009 στις 03:27
πηγή χρήστη
Σε άλλες γλώσσες...                            


8 απαντήσεις

ψήφοι
8

Έχετε δίκιο αυτό είναι ασυνεπής. Αυτό που συμβαίνει είναι ότι CheckBox δεν έχει ένα γεγονός το κλικ server-side, έτσι σήμανσης σας παίρνει αποδίδονται στο πρόγραμμα περιήγησης. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox_events.aspx

Εκτιμώντας Button έχει ένα OnClick - έτσι ASP.NET αναμένει μια αναφορά σε μια εκδήλωση στο OnClick σήμανσης σας.

Απαντήθηκε 16/07/2009 στις 03:34
πηγή χρήστη

ψήφοι
98

Αυτό είναι πολύ παράξενο. Έλεγξα τη σελίδα τεκμηρίωσης CheckBox η οποία έχει

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

Όπως μπορείτε να δείτε, δεν υπάρχει το κλικ ή OnClientClick χαρακτηριστικά ορίζεται.

Κρατώντας αυτό κατά νου, νομίζω ότι αυτό είναι ό, τι συμβαίνει.

Όταν το κάνετε αυτό,

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

ASP.NET δεν τροποποιεί το χαρακτηριστικό το κλικ και την καθιστά ως έχει στο πρόγραμμα περιήγησης. Θα πρέπει να καταστεί ως εξής:

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

Προφανώς, ένα πρόγραμμα περιήγησης μπορεί να καταλάβει «το κλικ» και βάζει μια ειδοποίηση.

Και σε αυτό το σενάριο

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

Και πάλι, ASP.NET δεν θα αλλάξει την OnClientClick χαρακτηριστικό και θα το καταστήσει ως

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

Δεδομένου ότι το πρόγραμμα περιήγησης δεν θα καταλάβουν OnClientClick τίποτα δεν θα συμβεί. Επίσης, δεν θα εγείρει λάθος, δεδομένου ότι είναι ακριβώς ένα άλλο χαρακτηριστικό.

Μπορείτε να επιβεβαιώσετε παραπάνω κοιτάζοντας το κατέστησε HTML.

Και ναι, αυτό δεν είναι διαισθητικό καθόλου.

Απαντήθηκε 16/07/2009 στις 03:35
πηγή χρήστη

ψήφοι
8

Επειδή είναι δύο διαφορετικά είδη ελέγχων ...

Βλέπετε, web browser σας δεν ξέρετε για το διακομιστή προγραμματισμού. γνωρίζει μόνο το δικό του DOM και τα μοντέλα περίπτωση που χρησιμοποιεί ... Και για κλικ εκδηλώσεις των αντικειμένων που παρέχονται σε αυτό. Θα πρέπει να εξεταστεί η τελική σήμανσης που είναι πραγματικά αποστέλλεται στον browser από 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);" />

Τώρα, όσο πιο κοντά μπορώ να θυμηθώ, δεν υπάρχουν προγράμματα περιήγησης πουθενά που υποστηρίζουν την εκδήλωση «OnClientClick» στο DOM τους ...

Σε περίπτωση αμφιβολίας, δείτε πάντα την πηγή της εξόδου, καθώς αποστέλλεται στον browser ... υπάρχει ένας ολόκληρος κόσμος των πληροφοριών εντοπισμού σφαλμάτων που μπορείτε να δείτε.

Απαντήθηκε 16/07/2009 στις 03:39
πηγή χρήστη

ψήφοι
1

Ήμουν καθαρισμό προειδοποιήσεις και μηνύματα και να δείτε ότι VS έχει προειδοποιήσει γι 'αυτό: Επικύρωση (ASP.Net): Χαρακτηριστικό «το κλικ» δεν είναι έγκυρο χαρακτηριστικό του στοιχείου «πλαίσιο ελέγχου». Χρησιμοποιήστε τον έλεγχο εισόδου html για να καθορίσετε μια πλευρά του πελάτη χειριστή και τότε δεν θα πάρετε την πρόσθετη ετικέτα ανοίγματος και τα δύο στοιχεία.

Απαντήθηκε 03/10/2010 στις 21:56
πηγή χρήστη

ψήφοι
5

Για όσους από εσάς πήρε εδώ ψάχνουν για το διακομιστή OnClickχειριστής είναιOnCheckedChanged

Απαντήθηκε 29/11/2012 στις 17:00
πηγή χρήστη

ψήφοι
-1

Μια λύση είναι με JQuery:

$(document).ready(
    function () {
        $('#mycheckboxId').click(function () {
               // here the action or function to call
        });
    }
);
Απαντήθηκε 19/01/2015 στις 16:17
πηγή χρήστη

ψήφοι
0

Μπορείτε να κάνετε την ετικέτα ως εξής:

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

Η .checked ιδιοκτησίας στην κάλεσε την Javascript είναι σωστό ... η τρέχουσα κατάσταση του πλαισίου ελέγχου:

  function checkchanged(obj) {
      alert(obj.checked)
  }
Απαντήθηκε 14/02/2018 στις 21:28
πηγή χρήστη

ψήφοι
0

Asp.net CheckBox δεν υποστηρίζει τη μέθοδο OnClientClick.
Αν θέλετε να προσθέσετε κάποια εκδήλωση Javascript για να τη 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
Απαντήθηκε 19/12/2018 στις 12:29
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more