একটি ক্লিকের জন্য অনক্লিক বনাম অনক্লিয়েন্ট ক্লিক করুন: চেকবক্স?


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

(আমি জানি বাটন.অন ক্লিকের জন্য কী; আমি ভাবছি কেন চেকবক্স একইভাবে কাজ করে না ...)

উত্তর:


106

এটা খুব অদ্ভুত। আমি চেক চেকবক্স ডকুমেন্টেশন পৃষ্ঠাটিতে যেখানে লেখা আছে

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

আপনি দেখতে পাচ্ছেন যে কোনও অনক্লিক বা অনক্লিয়েন্টক্লিক বৈশিষ্ট্য সংজ্ঞায়িত হয়নি।

এটি মাথায় রেখে, আমি মনে করি এটি ঘটছে।

আপনি যখন এটি করেন,

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

এএসপি.নেট অনক্লিক বৈশিষ্ট্যটি সংশোধন করে না এবং এটি ব্রাউজারে যেমন উপস্থাপন করে। এটি হিসাবে রেন্ডার করা হবে:

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

স্পষ্টতই, একটি ব্রাউজার 'অনক্লিক' বুঝতে পারে এবং একটি সতর্কতা দেয়।

এবং এই পরিস্থিতিতে

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

আবার, এএসপি.এনইটি অনক্লিয়েন্টক্লিক বৈশিষ্ট্যটি পরিবর্তন করবে না এবং এটি হিসাবে রেন্ডার করবে

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

ব্রাউজারটি অনক্লায়েন্ট ক্লিককে বুঝতে না পারায় কিছুই হবে না। এটি কোনও ত্রুটি বাড়িয়ে তুলবে না কারণ এটি অন্য একটি বৈশিষ্ট্য।

রেন্ডার করা এইচটিএমএল দেখে আপনি উপরেরটি নিশ্চিত করতে পারেন।

এবং হ্যাঁ, এটি মোটেই স্বজ্ঞাত নয়।


ভাল কল. আমি কেবল উত্পন্ন এইচটিএমএল পরীক্ষা করেছি এবং এটি চেকবাক্স
ইনপুটটির

এটি অন্য একটি বিষয়, আমি এপিকে সত্যটি পছন্দ করি না: চেকবক্সটি অকারণে অতিরিক্ত স্প্যান সরবরাহ করে।
SolutionYogi

4
ভাল, তাদের কিছু। এটি নিজেই ইনপুটটিতে অনক্লিক রাখে তবে অনক্লিয়েন্টক্লিক স্প্যানের মধ্যে। অদ্ভুত!
স্টোবার

কি দারুন. ওয়েব কন্ট্রোলগুলি ব্যবহার করার পরে এটি হয়েছে যাতে আমার স্মৃতি ম্লান হয়ে যায়। আমার রেন্ডার করা এইচটিএমএল কেমন লাগে তা নিয়ন্ত্রণ করতে চাই বলে আমি HTML নিয়ন্ত্রণগুলি ব্যবহার করতে পছন্দ করি।
সমাধান

4
সেই ডকুমেন্টেশনটি প্রকৃতপক্ষে। নেট 1.1 এর। যতদূর আমি জানি, এএসপি .নেট চেকবক্সের জন্য একটি অনক্লিক সার্ভার-সাইড ইভেন্ট নেই, সুতরাং যখন আপনি অনক্লিক বা অনক্লিয়েন্টক্লিক লেখেন, কারণ এটি এটি জানেন না, এটি আপনার রচনাটি ঠিক কীভাবে রেন্ডার করে, কারণ এটি এর ডিফল্ট আচরণ ( যদি আমি ভুল না করি)
সেরজিও রোজাস

9

কারণ তারা দুটি ভিন্ন ধরণের নিয়ন্ত্রণ ...

আপনি দেখুন, আপনার ওয়েব ব্রাউজার সার্ভার সাইড প্রোগ্রামিং সম্পর্কে জানেন না। এটি কেবল এটির নিজস্ব ডিওএম এবং ইভেন্টের মডেলগুলি যা এটি ব্যবহার করে তা সম্পর্কে জানতে পারে ... এবং এতে প্রদর্শিত সামগ্রীর ক্লিক ইভেন্টগুলির জন্য। আপনার নিজের মধ্যে পার্থক্যগুলি দেখতে এএসপি. নেট থেকে ব্রাউজারে প্রেরিত চূড়ান্ত মার্কআপটি পরীক্ষা করা উচিত।

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

এখন, আমি যতটুকু স্মরণ করতে পারি, এমন কোনও ব্রাউজার নেই যেগুলি তাদের ডোমে "অনক্লিয়েন্টক্লিক" ইভেন্টকে সমর্থন করে ...

সন্দেহ থাকলে, সর্বদা আউটপুটটির উত্সটি ব্রাউজারে প্রেরিত হওয়ার সাথে সাথেই দেখুন ... আপনি দেখতে পারেন এমন ডিবাগ তথ্যের পুরো পৃথিবী রয়েছে।


8

আপনি ঠিক বলেছেন এটি বেমানান। যা ঘটছে তা হ'ল চেকবক্স কোনও সার্ভার-সাইড অনক্লিক ইভেন্ট রাখে না, তাই আপনার মার্কআপটি ব্রাউজারে রেন্ডার হয়ে যায়। http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox_events.aspx

বাটনটিতে অনক্লিক রয়েছে - সুতরাং এএসপি.নেট আপনার অনক্লিক মার্কআপে কোনও ইভেন্টের রেফারেন্স আশা করে।


6

আপনারা যারা এখানে এসেছেন তাদের জন্য সার্ভার-সাইড OnClick হ্যান্ডলারের সন্ধান এটিOnCheckedChanged


4
এটি সার্ভার-সাইড ইভেন্ট, ক্লায়েন্ট-সাইড ইভেন্ট নয়; যার অস্তিত্ব নেই।
রক্ষক এক

1

আমি সতর্কতা এবং বার্তাগুলি পরিষ্কার করেছিলাম এবং দেখুন যে ভিএস এটি সম্পর্কে সতর্ক করে দেয়: বৈধকরণ (এএসপি.নেট): 'অনক্লিক' বৈশিষ্ট্য 'চেকবক্স' উপাদানটির একটি বৈধ বৈশিষ্ট্য নয়। ক্লায়েন্টের সাইড হ্যান্ডলারটি নির্দিষ্ট করতে এইচটিএমএল ইনপুট নিয়ন্ত্রণ ব্যবহার করুন এবং তারপরে আপনি অতিরিক্ত স্প্যান ট্যাগ এবং দুটি উপাদান পাবেন না।


আকর্ষণীয় ... এটি এমন একটি প্রকল্প যা আমি কিছুক্ষণের জন্য গ্রহণ করেছিলাম এবং সেখানে দরকারী যে কোনও কিছু দেখার জন্য এটিতে অনেকগুলি সতর্কতা ছিল ... যদি আমি সঠিকভাবে মনে করি তবে এইচটিএমএল নিয়ন্ত্রণ ব্যবহারের নেতিবাচক দিকটি হ'ল আপনি সার্ভারটি করতে পারবেন না এর সাথে ম্যানিপুলেশনগুলি ...
স্টোবর

1

Asp.net চেকবক্সটি অনক্লায়েন্টক্লিকিকে সমর্থন করে না।
যদি আপনি কিছু জাভাস্ক্রিপ্ট ইভেন্ট এপগুলিতে যুক্ত করতে চান: চেকবক্সে আপনাকে "প্রি_রেন্ডার" বা সার্ভার কোডে "পেজ_ল্ড" ইভেন্টগুলিতে সম্পর্কিত বৈশিষ্ট্য যুক্ত করতে হবে:

সি #:

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

দ্রষ্টব্য: আপনি পৃষ্ঠা শিরোনামে অটোইভেন্টওয়্যারআপ = "মিথ্যা" সেট না করেছেন তা নিশ্চিত করুন।

ভিবি:

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

জাভাস্ক্রিপ্ট হিসাবে চিহ্নিত চেক করা সম্পত্তিটি সঠিক হবে ... চেকবক্সের বর্তমান অবস্থা:

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

-2

একটি সমাধান জিকুয়েরির সাথে রয়েছে:

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

সেকোনফ ফাংশন} অনুপস্থিত
মাহদি জোকার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.