কীভাবে JQuery.trigger পাবেন ('ক্লিক করুন'); মাউস ক্লিক শুরু করতে


145

JQuery ব্যবহার করে কীভাবে মাউস ক্লিক সিমুলেট করতে হয় তা বুঝতে আমার খুব কষ্ট হচ্ছে। কেউ কি দয়া করে আমাকে জানান যে আমি কী ভুল করছি।

এইচটিএমএল:

<a id="bar" href="http://stackoverflow.com" target="_blank">Don't click me!</a>
<span id="foo">Click me!</span>

JQuery:

jQuery('#foo').on('click', function(){
    jQuery('#bar').trigger('click');
});

ডেমো: স্বল্প

আমি যখন #foo বাটনে ক্লিক করি আমি # বারে একটি ক্লিক সিমুলেট করতে চাই তবে আমি যখন চেষ্টা করি তখন কিছুই হয় না। আমি চেষ্টাও করেছি jQuery(document).ready(function(){...})কিন্তু সাফল্য ছাড়াই।


2
jQuery triggerকোনও 'jQuery ক্লিক' ইভেন্ট যুক্ত হলে কেবল কাজ করে। অন্যথায় আপনি এইভাবে কিছু করতে সক্ষম হবেন না;
রেজা মামুন

3
এটি ব্রাউজারে নির্মিত একটি সুরক্ষা ব্যবস্থা। দেখুন @ Blazemonger এর উত্তর: stackoverflow.com/questions/7999806/...
সানচেজ

1
@ san.chez আকর্ষণীয়, তথ্যের জন্য ধন্যবাদ, এই সুরক্ষা ব্যবস্থা সম্পর্কে আগে জানতাম না!
লিকমাইকোড

উত্তর:


277

আপনার ব্যবহারের jQuery('#bar')[0].click(); পরিবর্তে প্রকৃত DOM উপাদানটিতে (jQuery অবজেক্ট নয়) মাউস ক্লিকের অনুকরণ করতে হবে.trigger() jQuery পদ্ধতিটি ।

দ্রষ্টব্য: ডোম লেভেল 2 সাফারিতে কিছু উপাদানগুলিতে.click() কাজ করে না । আপনি একটি workaround ব্যবহার করতে হবে।

http://api.jquery.com/click/


18
আপনি আমার দিন বাঁচিয়েছেন $ ('# এস্যাসেড') [0] .ক্লিক ();
waza123

JQuery ACF ক্ষেত্রগুলির পরবর্তী ট্যাবে ক্লিক করতে এটি ব্যবহার করুন: $ ('। পরবর্তী')। ক্লিক করুন (ফাংশন () {$ ('# প্রাথমিক li.active')। ') [0] .ক্লিক ();});
টিছা

1
ধন্যবাদ। এটি ডেস্কটপে কাজ করে। তবে মোবাইলে (অ্যান্ড্রয়েড ক্রোম) এটি হয় না। কোনও পরামর্শ?
kk-dev11

কিছু কারণে এটি বর্তমান ইউআরএলে হ্যাশটিকে ধ্বংস করে।
লুই

1
<ট্যাগটিতে hrefs এর মধ্যে একটি যদি '#' হয়, তা এটি করবে। <সাধারণত একটি আলাদা URL এ পুনঃনির্দেশ করে। আপনার ক্লিক হ্যান্ডলারের ফিরে আসার আগে আপনাকে অবশ্যই এটিকে অবশ্যই। বা, <ক ছাড়াও অন্য কিছু ট্যাগ ব্যবহার করুন; আপনি দৃশ্যমান যে কোনও কিছুতে ক্লিক হ্যান্ডলার সংযুক্ত করতে পারেন।
ওসামাবিনলোগিন ২২:১

43

এটি করার আগে আপনার কেবল একটি ছোট সময়সীমা ইভেন্ট রাখা দরকার .click() :

setTimeout(function(){ $('#btn').click()}, 100);

পৃষ্ঠাটি লোড হওয়ার পরে আপনি যদি কোনও ক্লিকের অনুকরণ করার চেষ্টা করছেন তবে নিখুঁত কাজ করে।
গ্যাব্রিয়েল জাজিল

33

এটি JQuery আচরণ। আমি নিশ্চিত নই কেন এটি এভাবে কাজ করে, এটি লিঙ্কের অনক্লিক ফাংশনটি কেবল ট্রিগার করে।

চেষ্টা করুন:

jQuery(document).ready(function() {
    jQuery('#foo').on('click', function() {
        jQuery('#bar')[0].click();
    });
});

ব্যাখ্যার জন্য ধন্যবাদ। JQuery এর খুব বিরক্তিকর আচরণ, তবে আপনার কোড কাজ করে।
লিকমাইকোড

মোটেও বিরক্তিকর নয়। trigger()ক্লিক ইভেন্ট জাভাস্ক্রিপ্ট অংশ চালানো উদ্দেশ্য । এটি function var() {}একাধিকবার পুনরায় ব্যবহৃত Thats তৈরির মতো ।

21

আমার ডেমো দেখুন: http://jsfiddle.net/8AVau/1/

jQuery(document).ready(function(){
    jQuery('#foo').on('click', function(){
         jQuery('#bar').simulateClick('click');
    });
});

jQuery.fn.simulateClick = function() {
    return this.each(function() {
        if('createEvent' in document) {
            var doc = this.ownerDocument,
                evt = doc.createEvent('MouseEvents');
            evt.initMouseEvent('click', true, true, doc.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
            this.dispatchEvent(evt);
        } else {
            this.click(); // IE Boss!
        }
    });
}

আমি মোড়ানো হবে this.click();একটি ইনelse if(this.click)
অ্যালেক্স ডব্লিউ

15

দরকারী হতে পারে:

যে কোডটি ট্রিগারকে কল করে তাদের ইভেন্টটি বলার পরে চলে যাওয়া উচিত ।

উদাহরণস্বরূপ, আমার কাছে কিছু কোড রয়েছে যা আমি # এক্সপেনস_টিকটসের মান পরিবর্তন করা হয় এবং যখন পৃষ্ঠাটি পুনরায় লোড করা হয় তখন কার্যকর করতে চাই

$(function() { 

  $("#expense_tickets").change(function() {
    // code that I want to be executed when #expense_tickets value is changed, and also, when page is reload
  });

  // now we trigger the change event
  $("#expense_tickets").trigger("change");

})

4
আহহ আমার সমস্যাও ছিল! কেন trigger()কাজ করছে না তা নিয়ে হতবাক হয়েছিল। দেখা যাচ্ছে যে আমার কাছে ট্রিগার কোডটি যে ফাংশনটি কল করছিল তার উপরে সেট করে রেখেছিল - তাই হুকটি আসলে জায়গায় ছিল না। ডোহ!
অ্যান্ড্রু নিউবি

5

jQuery এর .trigger('click');কেবল এই ইভেন্টটি ঘটানোর কারণ ঘটবে, এটি ডিফল্ট ব্রাউজার ক্রিয়াকেও ট্রিগার করবে না।

আপনি নিম্নলিখিত জাভাস্ক্রিপ্ট দিয়ে একই কার্যকারিতা অনুকরণ করতে পারেন:

jQuery('#foo').on('click', function(){
    var bar = jQuery('#bar');
    var href = bar.attr('href');
    if(bar.attr("target") === "_blank")
    {
        window.open(href);
    }else{
        window.location = href;
    }
});


0

আমি শীর্ষ দুটি উত্তর চেষ্টা করেছি, আমার ফাইল ইনপুট উপাদানগুলি থেকে "প্রদর্শন: কিছুই নয়" সরিয়ে না দেওয়া পর্যন্ত এটি আমার পক্ষে কাজ করে না। তারপরে আমি .Tigger () এ ফিরে গিয়েছিলাম এটি উইন্ডোজের সাফারিতেও কাজ করে।

সুতরাং উপসংহার, প্রদর্শন ব্যবহার করবেন না: কিছুই নয়; আপনার ফাইল ইনপুট আড়াল করতে , আপনি তার পরিবর্তে অস্বচ্ছতা: 0 ব্যবহার করতে পারেন।


0

প্রযুক্তিগতভাবে এর কোনও উত্তর নয়, তবে jQuery ACF ক্ষেত্রগুলিতে ট্যাবগুলির জন্য পরবর্তী এবং পূর্ববর্তী বোতামগুলি তৈরি করতে গৃহীত উত্তরের ( https://stackoverflow.com/a/20928975/82028 ) একটি ভাল ব্যবহার :

$('.next').click(function () {
    $('#primary li.active').next().find('.acf-tab-button')[0].click();
});

$('.prev').click(function () {
    $('#primary li.active').prev().find('.acf-tab-button')[0].click();
});


-3

আপনি জাভাস্ক্রিপ্ট সহ একটি ক্লিক ইভেন্ট অনুকরণ করতে পারবেন না। jQuery .trigger()ফাংশনটি কেবলমাত্র উপাদানটির "ক্লিক" নামক একটি ইভেন্টে আগুন দেয়, যা আপনি .on()jQuery পদ্ধতিতে ক্যাপচার করতে পারেন ।


9
"আপনি জাভাস্ক্রিপ্ট সহ একটি ক্লিক ইভেন্টের অনুকরণ করতে পারবেন না" - হ্যাঁ আপনি পারেন
nnnnnn

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