ঘটনাটি কোনও মানুষের দ্বারা ট্রিগার করা হয়েছে কিনা তা পরীক্ষা করুন


140

আমার একটি ইভেন্টের সাথে একটি হ্যান্ডলার সংযুক্ত আছে এবং আমি এটি সম্পাদন করতে চাই কেবল যদি এটি কোনও মানুষের দ্বারা ট্রিগার করা হয়, তবে ট্রিগার () পদ্ধতি দ্বারা নয়। আমি কীভাবে পার্থক্য বলতে পারি?

উদাহরণ স্বরূপ,

$('.checkbox').change(function(e){
  if (e.isHuman())
  {
    alert ('human');
  }
});

$('.checkbox').trigger('change'); //doesn't alert

উত্তর:


212

আপনি পরীক্ষা করতে পারেন e.originalEvent: যদি এটি সংজ্ঞায়িত করা হয় তবে ক্লিকটি মানবিক:

ভাঁজটি দেখুন http://jsfiddle.net/Uf8Wv/

$('.checkbox').change(function(e){
  if (e.originalEvent !== undefined)
  {
    alert ('human');
  }
});

আমার আদর্শ উদাহরণ:

<input type='checkbox' id='try' >try
<button id='click'>Click</button>

$("#try").click(function(event) {
    if (event.originalEvent === undefined) {
        alert('not human')
    } else {
        alert(' human');
    }


});

$('#click').click(function(event) {
    $("#try").click();
});

1
@ নিকোলা এই নথিটি কোথাও আছে?
Vidime বিদাস

@ সিম আমি জানি না, তবে আমি মনে করি এটি মানক। এখানে দেখুন: api.jquery.com/category/events/event-object
নিকোলা পেলুচেটি

@ নিকোলা আমি দেখতে পাচ্ছি এটি একটি jQuery জিনিস। jQuery এই সম্পত্তির ভিতরে আসল ইভেন্ট অবজেক্টটি সঞ্চয় করে। বিটিডব্লিউ, আপনি কী বোঝাতে চাইছেন না? আপনি স্রেফ ডকুমেন্টেশনের লিঙ্কটি সরবরাহ করেছেন:)
Šime Vidas

1
দেখে মনে হচ্ছে event.isTrigger
আপনিও

1
@ অনুরাগ, আমি ঠিক এখনই একই ইস্যুতে চলছিলাম। দেখে মনে হচ্ছে originalEventযে ইভেন্টটি যখন ট্রিগার করা হয় তখন jQuery জনবহুল হয় DOM.click()তবে আপনি ব্যবহার করতে পারেন $($("#try")[0]).click();যা আড়ষ্ট, তবে কার্যকর।
ড্যানিয়েল গ্যারেট

19

উপরের চেয়ে আরও সোজা এগিয়ে হবে:

$('.checkbox').change(function(e){
  if (e.isTrigger)
  {
    alert ('not a human');
  }
});

$('.checkbox').trigger('change'); //doesn't alert

এটি সেরা উত্তর। ব্যাখ্যার জন্য, দেখুন: stackoverflow.com/questions/10704168/...
jaredjacobs

3
যদিও এটি প্রলুব্ধকর এবং সম্ভবত অনুশীলনে আরামদায়ক, নোট করুন যে jQuery বিকাশকারীরা এই সময়ের মতোisTrigger পাবলিক এপিআইতে স্নাতক হতে চান না ।
জন

7

আমি মনে করি এটি করার একমাত্র উপায় হ'ল ডকুমেন্টেশন অনুসারে triggerকলটিতে অতিরিক্ত প্যারামিটারে পাস করা ।

$('.checkbox').change(function(e, isTriggered){
  if (!isTriggered)
  {
    alert ('human');
  }
});

$('.checkbox').trigger('change', [true]); //doesn't alert

উদাহরণ: http://jsfiddle.net/wG2KY/


1
আপনি ইভেন্ট অবজেক্টের সম্পত্তি মূলটি পরীক্ষা করে দেখতে পারেন: ইভেন্টটি যদি কোনও ক্লিক থেকে না আসে তবে এটি
অপরিজ্ঞাত


1
কোনও কারণে ইভেন্ট.অরিজিনাল এভেন্ট আমার জন্য কাজ করছিল না (কেবল 1 টি পুনরুদ্ধার করে রাখা হয়েছিল) যখন জেপ্টো-এর 'ক্লিক' হ্যান্ডলারটি ব্যবহার করার সময়। তাই আমি উপরের সমাধানটি চেষ্টা করেছিলাম। কবজির মতো কাজ করেছেন।
ল্যারিডেক্স

7

গৃহীত উত্তর আমার পক্ষে কাজ করে না। এটি 6 বছর হয়েছে এবং তার পর থেকে jQuery অনেক পরিবর্তন হয়েছে।

উদাহরণস্বরূপ event.originalEventসর্বদা ফিরে আসেtrue jQuery 1.9.x. এর সাথেআমার অর্থ অবজেক্ট সর্বদা বিদ্যমান তবে বিষয়বস্তু আলাদা।

যারা jQuery এর নতুন সংস্করণ ব্যবহার করেন তারা এটি ব্যবহার করে দেখতে পারেন। ক্রোম, এজ, আইই, অপেরা, এফএফ এ কাজ করে

if ((event.originalEvent.isTrusted === true && event.originalEvent.isPrimary === undefined) || event.originalEvent.isPrimary === true) {
    //Hey hooman it is you
}

3

বর্তমানে বেশিরভাগ ব্রাউজারই ইভেন্ট সমর্থন করে isআসলে বিশ্বাসযোগ্য :

if (e.isTrusted) {
  /* The event is trusted: event was generated by a user action */
} else {
  /* The event is not trusted */
}

ডক্স থেকে :

IsTrusted শুধুমাত্র পাঠযোগ্য সম্পত্তির Eventইন্টারফেস একটি Boolean যে সত্য যখন ইভেন্ট একটি ব্যবহারকারী কর্ম দ্বারা উত্পন্ন হয় এবং মিথ্যা যখন ইভেন্ট তৈরি করা হয়েছে বা স্ক্রিপ্ট দ্বারা পরিবর্তন করা বা মাধ্যমে প্রেষিত EventTarget.dispatchEvent ()


0

বনাম ট্রিগার () কলটি মাউস ক্লিক সনাক্ত করতে আপনি অনমাসডাউন ব্যবহার করতে পারেন।


আমি নিম্নলিখিত দৃশ্যে কাজ নাও করতে পারি: কখনও কখনও ট্যাব কী ব্যবহার করে পৃষ্ঠার উপাদান নির্বাচন করা সম্ভব। উদাহরণস্বরূপ, যদি আমি এইভাবে একটি চেকবক্স নির্বাচন করে ফেলেছি তবে আমি স্পেস কী ব্যবহার করে চেক / আনচেক করতে পারি। অথবা ডাউন তীর কী ব্যবহার করে কোনও ড্রডপডাউন খুলুন।
দিয়েগো ফ্যাভেরো

0

আমি এমন সম্ভাবনার বিষয়ে চিন্তা করব যেখানে আপনি মাউসের অবস্থান যাচাই করেন, যেমন:

  • ক্লিক
  • মাউস অবস্থান পান
  • বোতামের কর্ডগুলি ওভারল্যাপ করে
  • ...

আমি নিম্নলিখিত দৃশ্যে কাজ নাও করতে পারি: কখনও কখনও ট্যাব কী ব্যবহার করে পৃষ্ঠার উপাদান নির্বাচন করা সম্ভব। উদাহরণস্বরূপ, যদি আমি এইভাবে একটি চেকবক্স নির্বাচন করে ফেলেছি তবে আমি স্পেস কী ব্যবহার করে চেক / আনচেক করতে পারি। অথবা ডাউন তীর কী ব্যবহার করে কোনও ড্রডপডাউন খুলুন।
দিয়েগো ফ্যাভেরো

0

আপনি আপনার সমস্ত কোড, কোন পরক কল নিয়ন্ত্রণ আছে আধারস্থ $(input).focus()চেয়ে setFocus()

গ্লোবাল ভেরিয়েবল ব্যবহার করা আমার পক্ষে একটি সঠিক উপায়।

var globalIsHuman = true;

$('input').on('focus', function (){
    if(globalIsHuman){
        console.log('hello human, come and give me a hug');
    }else{
        console.log('alien, get away, i hate you..');
    }
    globalIsHuman = true;
});

// alien set focus
function setFocus(){
    globalIsHuman = false;
    $('input').focus();
}
// human use mouse, finger, foot... whatever to touch the input

কিছু এলিয়েন এখনও $(input).focus()অন্য গ্রহ থেকে কল করতে চান । শুভকামনা বা অন্যান্য উত্তর চেক করুন


এটি কেবল লোককে কল করা থেকে setFocus()বিরত রাখে - এটি ফোকাস ইভেন্টটি ট্রিগার করা থেকে বাধা দেয় না। কিছু না লেখার setFocus()ফলে লোকেরা এটি কল করতে বাধা দেয়, তাই আমি সুবিধাটি দেখছি না। আসলে, লোকেরা এখনও কল করতে পারে $('input').focus()এবং এটি পাস করতে পারে have
রব

বাহ, প্রথমবার আমি প্রশ্নের উত্তর দেওয়ার পরে আমার কোনও মন্তব্য হয়েছে, আমি উত্তরটি আপডেট করব
vanduc1102

আপনি যদি কোনও অন্যান্য / তৃতীয় পক্ষের স্ক্রিপ্টিং সহ বন্ধ পরিবেশে কাজ করছেন তবে এটি নিখুঁত বিশ্বে কাজ করবে। তবে বেশিরভাগ ব্যবহারিক অ্যাপ্লিকেশনগুলি ক্লায়েন্ট সাইটের জন্য যা তাদের মধ্যে সমস্ত ধরণের প্লাগইন এবং স্ক্রিপ্ট যুক্ত রয়েছে যা খুব ভালভাবে সেই ফোকাসটিকে কল করতে পারে। একটি জিনিস যা (function(){/*your code here*/})();এটির সহায়তা করতে পারে তা হ'ল আপনার কোড (এবং যে কোনও কোডের জন্য যে ফাংশনটি কল করতে হবে) এর মতো স্কোপযুক্ত ফাংশনটি মোড়ানো : এটি সেটফোকাস ফাংশনটি কল করা থেকে সুরক্ষিত রাখবে এবং বুলিয়ান বাইরের স্ক্রিপ্টগুলির দ্বারা পরিবর্তন হওয়া থেকে রক্ষা করবে।
Xandor
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.