jQuery, চেকবক্স এবং .is (": পরীক্ষিত")


91

যখন আমি কোনও ফাংশনটিকে একটি চেকবক্সের উপাদানটিতে আবদ্ধ করি যেমন:

$("#myCheckbox").click( function() {
    alert($(this).is(":checked"));
});

ইভেন্টটি ট্রিগার হওয়ার আগে চেকবক্সটি তার চেক করা বৈশিষ্ট্যটি পরিবর্তন করে , এটি স্বাভাবিক আচরণ এবং একটি বিপরীত ফলাফল দেয়।

তবে, আমি যখন করি:

$("#myCheckbox").click();

ইভেন্টটি ট্রিগার হওয়ার পরে চেকবক্সটি এটির পরীক্ষিত বৈশিষ্ট্যটি পরিবর্তন করে ।

আমার প্রশ্নটি হল, জিকুয়ারি থেকে ক্লিক ইভেন্টকে ট্রিগার করার কোনও উপায় কি সাধারণ ক্লিকের মতো (প্রথম দৃশ্যে) করতে পারে?

PS: আমি ইতিমধ্যে চেষ্টা করেছি trigger('click');


4
আমি এই বিষয়টি যাচাই করেছি। আপনি সম্পূর্ণ সঠিক। যে মনে মত একটি বাগ হতে পারে। আমি এটিকে jQuery এর সাথে একটি বাগ হিসাবে উত্থাপন করতাম এবং
দেখতাম

4
'পরিবর্তন' ইভেন্টের কী হবে?
জিপ্পিভি

@ ক্লেটাস প্রকৃতপক্ষে, এটি একটি জেকারি 1.4.2 বাগ। 1.3.2 ঠিক কাজ করে।
বেন


@ নিক এটি এখনও একটি সাধারণ মাউস ক্লিক করবে তার বিপরীত কাজ করে। আমি সত্যই জানি না কেন 1.3.2 আমার জন্য কাজ করে এবং 1.4.2 কাজ করে না, তবে এখনও, এটি পরিবর্তন করা দরকার।
বেন

উত্তর:


101
$('#myCheckbox').change(function () {
    if ($(this).prop("checked")) {
        // checked
        return;
    }
    // not checked
});

দ্রষ্টব্য: jquery এর পুরানো সংস্করণগুলিতে এটি ব্যবহার করা ঠিক ছিল attrএখন এটিprop রাষ্ট্র পড়তে ব্যবহার করার পরামর্শ দেওয়া হচ্ছে


4
আমি এটি চেষ্টা করেছি, "$ (# মাইচেকবক্স) .ক্লিক ()" বাক্সটি চেক / চেক করে রাখে তবে পরিবর্তন ফাংশনটি কখনই ট্রিগার হয় না। আমি ক্লিক () ক্লিক করার পরিবর্তে 'চেকড' বৈশিষ্ট্যটি পরিবর্তন করার চেষ্টা করেছি এবং এমনকি 'পরিবর্তন' ফাংশনটিকে 'লাইভ' এ সেট করার চেষ্টা করেছি।
বেন

@ বেন - এটি চালানোর জন্য আপনাকে এটিকে অন্যভাবে ট্রিগার করতে হবে, ট্রিগার বিবৃতিটির জন্য আমার উত্তর দেখুন।
নিক ক্র্যাভার

@ নিক ধন্যবাদ, আমি সমাধানটি প্রথম প্রকাশিত হওয়ায় তিনি টিউকার্টের উত্তরটি গ্রহণ করব। বোকা আমি 'পরিবর্তন' পদ্ধতিটি ট্রিগার করিনি।
বেন

19
এবং জেকুয়েরির নতুন সংস্করণগুলির জন্য অন্য কাউকে খুঁজে বের করার ক্ষেত্রে অ্যাট্রি ("চেক করা") এর পরিবর্তে ফাংশনটি প্রোপ ("পরীক্ষিত") করা হয়।
danski

আমি পিছনে-সামঞ্জস্য না করার কারণে 'প্রপ' এড়াতে পারি, এসএসপি। আইই তে
vapcguy

27

এখানে একটি কাজের আশপাশ রয়েছে যা jQuery 1.3.2 এবং 1.4.2 এ কাজ করে :

$("#myCheckbox").change( function() {
    alert($(this).is(":checked"));
});

//Trigger by:
$("#myCheckbox").trigger('click').trigger('change');​​​​​​​​​​​​​

তবে আমি একমত, এই আচরণটি দেশীয় ঘটনার সাথে তুলনামূলকভাবে কৃপণ বলে মনে হচ্ছে।


10

জুন ২০১ 2016 পর্যন্ত (jquery 2.1.4 ব্যবহার করে) অন্য কোনও প্রস্তাবিত সমাধান কাজ করে না। চেক করা attr('checked')সর্বদা ফিরে আসে undefinedএবং is('checked)সর্বদা ফিরে আসে false

প্রপ পদ্ধতিটি কেবল ব্যবহার করুন:

$("#checkbox").change(function(e) {

  if ($(this).prop('checked')){
    console.log('checked');
  }
});

4
is('checked)মিথ্যা ফিরিয়ে দেবে কারণ "পরীক্ষিত" কোনও সিএসএস সিউডো নির্বাচক নয়। সঠিকটি হওয়া উচিত is(':checked')তাই এটি পরিবর্তে ": পরীক্ষিত" সন্ধান করবে।
ধাউপিন

4

আমি এখনও jQuery 1.7.2 এর সাথে এই আচরণটি অনুভব করছি। একটি সহজ কর্মসীমা হ'ল সেটটাইমআউট সহ ক্লিক হ্যান্ডলারের সম্পাদন স্থগিত করা এবং এর মধ্যে ব্রাউজারটিকে তার যাদু করতে দেওয়া:

$("#myCheckbox").click( function() {
    var that = this;
    setTimeout(function(){
        alert($(that).is(":checked"));
    });
});

হ্যাঁ! একটু অফটপিক, তবে কেইনডো গ্রিডগুলিতে আমাকে চেকবক্সগুলির সাথে একই কাজ করতে হয়েছিল যখন আমি ডিফল্টরূপে এটি "সক্রিয়" হতে চাইলে "নতুন রেকর্ড যুক্ত করুন" ক্লিক করেন। আমি এটি 500ms সময় দিতে হয়েছিল। তারপর আমি যোগ করার জন্য ছিল .click(), তারপর সেট .attr('value', 'true'), তারপর .change(), তারপর .blur()আগেই প্রোগ্রামেটিক্যালি বক্স সেট যখন আমি "আপডেট" বোতাম প্রোগ্রামেটিক্যালি ক্লিক হবে ....
vapcguy

2

যদি আপনি এটি বরং অনাকাঙ্ক্ষিত আচরণটি অনুমান করেন, তবে এর চারপাশের অংশে jQuery.trigger () থেকে চেকবক্সের ক্লিক হ্যান্ডলারের কাছে একটি অতিরিক্ত প্যারামিটারটি পাঠানো হবে। এই অতিরিক্ত প্যারামিটারটি ক্লিক হ্যান্ডলারকে জানানোর জন্য যে ক্লিকটি প্রোগ্রামিকভাবে ট্রিগার করা হয়েছে, বরং ব্যবহারকারীরা সরাসরি চেকবক্সে ক্লিক করে। চেকবক্সের ক্লিক হ্যান্ডলারটি তারপরে উল্লিখিত চেকের স্থিতিটি উল্টে দিতে পারে।

"আমি আমার চেকবক্স" আইডি দিয়ে চেকবক্সে ক্লিক ইভেন্টটি কীভাবে ট্রিগার করব তা এখানে রয়েছে। মনে রাখবেন যে আমি একটি একক সদস্য, ননইউআইয়ের সাথে একটি অবজেক্ট প্যারামিটারও দিয়ে যাচ্ছি, যা সত্য হিসাবে সেট করা রয়েছে:

$("#myCheckbox").trigger('click', {nonUI : true})

এবং এখানে আমি কীভাবে চেকবক্সের ক্লিক ইভেন্ট হ্যান্ডলারটি পরিচালনা করব। হ্যান্ডলার ফাংশনটি ননইউআই আইটেমের দ্বিতীয় প্যারামিটার হিসাবে উপস্থিতি পরীক্ষা করে। (প্রথম প্যারামিটারটি সর্বদা ইভেন্ট নিজেই হয়)) প্যারামিটারটি উপস্থিত থাকে এবং সত্যতে সেট করা থাকলে আমি প্রতিবেদনিত। চেক করা স্থিতিটি উল্টে দিই। যদি এই জাতীয় কোনও প্যারামিটারটি পাস না করা হয় - যা ব্যবহারকারী কেবলমাত্র ইউআই-তে চেকবক্সে ক্লিক করে থাকে না - তবে আমি আসল। চেক করা স্থিতিটি রিপোর্ট করছি:

$("#myCheckbox").click(function(e, parameters) {
   var nonUI = false;
        try {
            nonUI = parameters.nonUI;
        } catch (e) {}
        var checked = nonUI ? !this.checked : this.checked;
        alert('Checked = ' + checked);
    });

জেএসফিডেল সংস্করণটি http://jsfiddle.net/BrownieBoy/h5mDZ/ এ

আমি ক্রোম, ফায়ারফক্স এবং আই 8 দিয়ে পরীক্ষা করেছি।


2
<input id="widget-wpb_widget-3-custom_date" class="mycheck" type="checkbox" value="d/M/y" name="widget-wpb_widget[3][custom_date]" unchecked="true">    

var atrib = $('.mycheck').attr("unchecked",true);
$('.mycheck').click(function(){
if ($(this).is(":checked")) 
{
$('.mycheck').attr("unchecked",false);
   alert("checkbox checked");
}
else
{
$('.mycheck').attr("unchecked",true);
 alert("checkbox unchecked");
}
});

কিছু মন্তব্য ভাল লাগবে
ড্যানিল গাপোনভ



0

ঠিক আছে, প্রথম দৃশ্যের সাথে মিল রাখতে, এটি এমন কিছু যা আমি সামনে এলাম।

http://jsbin.com/uwupa/edit

মূলত, "ক্লিক" ইভেন্টটিকে আবদ্ধ করার পরিবর্তে আপনি "পরিবর্তন" ইভেন্টটি সতর্কতার সাথে আবদ্ধ করেন।

তারপরে, আপনি যখন ইভেন্টটি ট্রিগার করবেন, প্রথমে আপনি ক্লিক ট্রিগার করুন, তারপরে পরিবর্তনটি ট্রিগার করুন।


0

নিক ক্র্যাভারের উত্তর ছাড়াও, এটি সঠিকভাবে কাজ করার জন্য IE 8আপনাকে চেকবক্সে একটি অতিরিক্ত ক্লিক হ্যান্ডলার যুক্ত করতে হবে:

// needed for IE 8 compatibility
if ($.browser.msie)
    $("#myCheckbox").click(function() { $(this).trigger('change'); });

$("#myCheckbox").change( function() {
    alert($(this).is(":checked"));
});

//Trigger by:
$("#myCheckbox").trigger('click').trigger('change');

অন্যথায় কলব্যাক কেবল তখনই ট্রিগার করা হবে যখন চেকবক্সটি ফোকাস হারিয়ে ফেলবে as IE 8 ক্লিক করার সময় চেকবক্স এবং রেডিওগুলিতে ফোকাস রাখে।

IE 9যদিও পরীক্ষা করা হয়নি।


0
$( "#checkbox" ).change(function() {
    if($(this).is(":checked")){
        alert('hi');
    }

});

4
দয়া করে কিছু বিশদ উল্লেখ করুন
কোডওয়ারিওর

দেখে মনে হচ্ছে changeএটি ওপি'র পরিবর্তে ব্যবহার করে কেবল একটি পুনরাবৃত্ত উত্তর click, এবং কেবল ifপরীক্ষার ভিন্ন উপায় হিসাবে একটি বিবৃতি ব্যবহার করে :checked
vapcguy

-1

সর্বাধিক দ্রুত এবং সহজ উপায় :

$('#myCheckbox').change(function(){
    alert(this.checked);
});

$el[0].checked;

- এল - নির্বাচনের jquery উপাদান।

উপভোগ করুন!


-2
if ($.browser.msie) {
    $("#myCheckbox").click(function() { $(this).trigger('change'); });
}

$("#myCheckbox").change(function() {
        alert($(this).is(":checked"));
    });
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.