कहो कि मेरे पास एक क्लिक हैंडलर परिभाषित है:
$("#foo").click(function(e){
});
मैं, फंक्शन हैंडलर के भीतर कैसे बता सकता हूं कि क्या कार्यक्रम को प्रोग्राम द्वारा या उपयोगकर्ता द्वारा निकाल दिया गया था?
$x.click()या $x.trigger('click')।
कहो कि मेरे पास एक क्लिक हैंडलर परिभाषित है:
$("#foo").click(function(e){
});
मैं, फंक्शन हैंडलर के भीतर कैसे बता सकता हूं कि क्या कार्यक्रम को प्रोग्राम द्वारा या उपयोगकर्ता द्वारा निकाल दिया गया था?
$x.click()या $x.trigger('click')।
जवाबों:
आप ईवेंट ऑब्जेक्ट पर एक नज़र डाल सकते हैं e। यदि घटना एक असली क्लिक से शुरू हो रहा था, तो आप चीजों की तरह होगा clientX, clientY, pageX, pageY, आदि के अंदर eऔर वे संख्या हो जाएगा; ये संख्याएँ माउस की स्थिति से संबंधित होती हैं, जब क्लिक चालू हो जाता है, लेकिन वे संभवत: तब भी मौजूद रहेंगे, जब कीबोर्ड के माध्यम से क्लिक शुरू किया गया था। यदि घटना तब तक चालू हो जाती है $x.click()तो आपके पास सामान्य स्थिति मान नहीं होंगे e। आप originalEventप्रॉपर्टी को भी देख सकते हैं , अगर इवेंट से आया है तो यह नहीं होना चाहिए $x.click()।
शायद कुछ इस तरह:
$("#foo").click(function(e){
if(e.hasOwnProperty('originalEvent'))
// Probably a real click.
else
// Probably a fake click.
});
और यहाँ थोड़ा सैंडबॉक्स खेलने के लिए है: http://jsfiddle.net/UtzND/
originalEvent? क्या यह सही बात है? कहीं भी निर्देशांक हैं? निर्देशांक सुसंगत हैं? क्या अंदर निर्देशांक हैं #foo? ...
आप एक अतिरिक्त पैरामीटर का उपयोग कर सकते हैं जैसा कि jQuery ट्रिगर मैनुअल में कहा गया है :
$("#foo").click(function(e, from){
if (from == null)
from = 'User';
// rest of your code
});
$('#foo').trigger('click', ['Trigger']);
$x.click(), .click()फोन करने वाले को स्पष्ट रूप से बताने के लिए है कि वे यह faking रहे है। यह केविन ओवेकी के ऊपर निर्भर करता है या नहीं हो सकता है।
$x.click()जो कि इवेंटहैंडलर (उपयोगकर्ता क्लिक के लिए, जो "सामान्य" हो सकता है ) के बीच के अंतर को काफी नहीं समझता
पहले से ही एक और सवाल का जवाब है।
कैसे पता लगाया जाए कि क्या एक क्लिक () एक माउस क्लिक है या कुछ कोड द्वारा ट्रिगर किया गया है?
whichइवेंट ऑब्जेक्ट की संपत्ति का उपयोग करें । यह undefinedकोड-ट्रिगर घटनाओं के लिए होना चाहिए
$("#someElem").click(function(e) {
if (e.which) {
// Actually clicked
} else {
// Triggered by code
}
});
JsFiddle उदाहरण - http://jsfiddle.net/interdream/frw8j/
आशा करता हूँ की ये काम करेगा!
selectदेना होगा e.which==undefined।
मैंने उपरोक्त सभी समाधानों की कोशिश की है। मेरे मामले में सुखद काम किया गया है। नीचे समाधान मेरे लिए काम किया। आशा है कि यह आपकी मदद करेगा।
$(document).ready(function(){
//calling click event programmatically
$("#chk1").trigger("click");
});
$(document).on('click','input[type=checkbox]',function(e) {
if(e.originalEvent.isTrusted==true){
alert("human click");
}
else{
alert("programmatically click");
}
});
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js">
</script>
<input type="checkbox" id="chk1" name="chk1" >Chk1</input>
<input type="checkbox" id="chk2" name="chk2" >Chk2</input>
<input type="checkbox" id="chk3" name="chk3" >Chk3</input>
DOM स्तर 3 Event.isTrusted निर्दिष्ट करता है। यह केवल वर्तमान में IE9 + और फ़ायरफ़ॉक्स में समर्थित है (मेरे परीक्षणों के आधार पर। मैंने यह भी पढ़ा है (हालांकि पूरी तरह से शोध नहीं किया गया है) कि इसे कुछ ब्राउज़रों में ओवरराइड किया जा सकता है और शायद अभी तक 100% वास्तव में भरोसेमंद (दुर्भाग्य से) तैयार नहीं है।
यह @ म्यू के फिडेल का संशोधित संस्करण है जो IE और फ़ायरफ़ॉक्स पर काम करता है।
isTrustedक्या समर्थित नहीं है और देखने योग्य नहीं है , आपको कुछ परीक्षणों में मिश्रण करना होगा । मुझे लगता है कि असली जवाब इस सवाल के पीछे के कारण पर निर्भर करता है और हमने कभी भी इसका पता नहीं लगाया।
बौद्धिक चर्चा में भाग लेने के लिए नहीं, जो कोड मेरे लिए फ़िल्टर करने का काम करता है .click()और .trigger('click')है-
$(document).on('click touchstart', '#my_target', function(e) {
if (e.pageX && e.pageY) { // To check if it is not triggered by .click() or .trigger('click')
//Then code goes here
}
});