एक एस्प के लिए OnClient बनाम पर क्लिक करें: चेकबॉक्स?


83

क्या किसी को पता है कि एस्प के लिए क्लाइंट-साइड जावास्क्रिप्ट हैंडलर क्यों: चेकबॉक्स को ऑनक्लिएंटक्लिक करने के बजाय ऑनक्लिक = "" विशेषता होने की आवश्यकता है = "" विशेषता, एस्प के लिए: बटन?

उदाहरण के लिए, यह काम करता है:

<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 किस लिए है? मुझे आश्चर्य है कि चेकबॉक्स उसी तरह काम क्यों नहीं करता है ...)

जवाबों:


106

यह बहुत अजीब है। मैंने चेकबॉक्स प्रलेखन पृष्ठ की जांच की जो पढ़ता है

<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);" />

जाहिर है, एक ब्राउज़र 'ऑनक्लिक' को समझ सकता है और एक अलर्ट डालता है।

और इस परिदृश्य में

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

फिर से, ASP.NET OnClientClick विशेषता को नहीं बदलेगा और इसे प्रस्तुत करेगा

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

जैसा कि ब्राउज़र को समझ में नहीं आएगा OnClientClick कुछ भी नहीं होगा। यह भी कोई त्रुटि नहीं उठाएगा क्योंकि यह सिर्फ एक और विशेषता है।

आप प्रदान किए गए HTML को देखकर ऊपर पुष्टि कर सकते हैं।

और हाँ, यह बिल्कुल भी सहज नहीं है।


अच्छा निर्णय। मैंने अभी जेनरेट किए गए html को चेक किया है, और यह वास्तव में उन विशेषताओं को डाल रहा है जो चेकबॉक्स इनपुट के आस-पास की अवधि में समझ में नहीं आती हैं, लेकिन अन्यथा आप सही हैं ...
Stobor

यह एक और बात है, मुझे यह तथ्य पसंद नहीं है कि एस्प: चेकबॉक्स अनावश्यक रूप से एक अतिरिक्त अवधि प्रदान करता है।
समाधानयोगी

1
खैर, उनमें से कुछ। यह इनपुट में ही ऑनक्लिक डालता है, लेकिन स्पैन में onClient क्लिक करता है। अजीब!
स्टोबोर

वाह। जब से मैंने वेब नियंत्रण का उपयोग किया है तब से यह है कि मेरी स्मृति लुप्त होती है। मैं HTML नियंत्रणों का उपयोग करना पसंद करता हूं क्योंकि मैं यह नियंत्रित करना चाहता हूं कि मेरा गाया हुआ HTML कैसा दिखता है।
SolutionYogi

2
वह प्रलेखन वास्तव में .Net 1.1 से है। जहाँ तक मुझे पता है, ASP .net ने CheckBox के लिए एक OnClick सर्वर-साइड ईवेंट नहीं किया है, इसलिए जब आप OnClick या OnClientClick लिखते हैं, क्योंकि यह इसे नहीं जानता है, तो यह वास्तव में आपके लिखे हुए व्यवहार को प्रस्तुत करता है, जैसा कि इसका डिफ़ॉल्ट व्यवहार है ( अगर मैं गलत नहीं हूँ)
सर्जियो रोसस

9

क्योंकि वे दो अलग-अलग प्रकार के नियंत्रण हैं ...

आप देखते हैं, आपका वेब ब्राउज़र सर्वर साइड प्रोग्रामिंग के बारे में नहीं जानता है। यह केवल इसके बारे में जानता है कि यह स्वयं का DOM और इवेंट मॉडल है जो इसका उपयोग करता है ... और इसके लिए प्रदान की गई वस्तुओं की घटनाओं के लिए क्लिक करें। आपको अंतिम मार्कअप की जांच करनी चाहिए जो वास्तव में एएसपी.नेट से ब्राउज़र को भेजा जाता है ताकि आपके स्वयं के अंतर को देख सकें।

<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" ईवेंट का समर्थन करता हो ...

जब संदेह होता है, तो हमेशा आउटपुट के स्रोत को देखें क्योंकि यह ब्राउज़र को भेजा जाता है ... डिबग जानकारी की एक पूरी दुनिया है जिसे आप देख सकते हैं।


8

आप सही हैं यह असंगत है। क्या हो रहा है कि चेकबॉक्स सर्वर-साइड ऑनक्लिक घटना नहीं है, इसलिए आपका मार्कअप ब्राउज़र को प्रदान किया जाता है। http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox_events.aspx

जबकि बटन पर एक OnClick है - इसलिए ASP.NET को आपके OnClick मार्कअप में किसी घटना के संदर्भ की अपेक्षा है।


6

आप में से उन लोगों के लिए जो यहां सर्वर-साइड OnClick हैंडलर की तलाश में हैंOnCheckedChanged


1
वह सर्वर-साइड ईवेंट है, न कि क्लाइंट-साइड ईवेंट; जिसका कोई अस्तित्व नहीं है।
रक्षा एक

1

मैं चेतावनियों और संदेशों को साफ कर रहा था और देख रहा था कि VS इसके बारे में चेतावनी देता है: सत्यापन (ASP.Net): गुण 'ऑनक्लिक' तत्व 'चेकबॉक्स' का एक वैध गुण नहीं है। क्लाइंट साइड हैंडलर निर्दिष्ट करने के लिए HTML इनपुट नियंत्रण का उपयोग करें और फिर आपको अतिरिक्त स्पैन टैग और दो तत्व नहीं मिलेंगे।


दिलचस्प ... यह एक ऐसी परियोजना थी जिसे मैंने कुछ समय के लिए संभाला था, और इसमें कुछ भी उपयोगी देखने के लिए बहुत सी चेतावनियां थीं ... अगर मुझे सही याद है, तो HTML नियंत्रण का उपयोग करने के लिए नकारात्मक पक्ष यह है कि आप सर्वर नहीं कर सकते इसके साथ छेड़छाड़ करें ...
Stobor

1

Asp.net चेकबॉक्स समर्थन विधि नहीं है OnClientClick।
यदि आप एस्प में कुछ जावास्क्रिप्ट घटना जोड़ना चाहते हैं: चेकबॉक्स आपको "Pre_Render" या सर्वर कोड में "Page_Load" घटनाओं पर संबंधित विशेषताओं को जोड़ना होगा:

सी#:

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

नोट: सुनिश्चित करें कि आपने AutoEventWireup सेट नहीं किया है = पृष्ठ शीर्षक में "गलत"।

वीबी:

    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)" />

चेक जावास्क्रिप्ट में .checked संपत्ति सही होगी ... चेकबॉक्स की वर्तमान स्थिति:

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

-2

एक समाधान JQuery के साथ है:

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

Seconf function} गायब है
Mahdi jokar
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.