2013-05-14 7 views
9

jQuery isTrigger प्रॉपर्टी प्रदान करता है जो हमें यह जानने की अनुमति देता है कि यह ईवेंट "वास्तविक घटना" था या यह केवल "ट्रिगर" था।jQuery ट्रिगर ईवेंट लेकिन अभी भी event.isTrigger false

$(ele).on("click", function(e){ 
    if(e.isTrigger){ 
     // this event was only triggered, not a real event 
    }else{ 
     // this was a real event 
    } 
}) 

इकाई परीक्षण प्रयोजनों के लिए, वहाँ trigger के लिए एक रास्ता एक घटना है और किसी भी तरह isTrigger संपत्ति के ऊपर लिख .. और घटना में कॉलबैक अभी भी (isTrigger === false होने से) के रूप में व्यवहार करता है, तो यह एक वास्तविक क्लिक घटना थी। । निम्नलिखित कोड की कोशिश कर रहा था:

var triggerClick = jQuery.Event("click", { 
    isTrigger:false, 
    data:{ 
     isTrigger:false 
    } 

लेकिन यह इसे सही ढंग से पारित करने के लिए प्रतीत नहीं होता ..

उत्तर

5

कैसे देशी तरीके के बारे में, jQuery isTrigger पूरी तरह से परहेज:

function simulateClick(elem) { 
    var evt = document.createEvent("MouseEvents"); 
    evt.initMouseEvent("click", true, true, elem, 
      0, 0, 0, 0, 0, false, false, false, false, 0, null); 
    if (document.createEvent) { 
    elem.dispatchEvent(evt); 
    } else { 
    elem.fireEvent("on" + evt.eventType, evt); // support for IE crap 
    } 
} 

इसका इस्तेमाल करने के लिए आपको बस करना चाहते हैं:

$(ele).on("click", function(e){ 
    if(e.isTrigger){ 
     // this event was only triggered, not a real event 
     console.log('triggered'); 
    }else{ 
     // this was a real event 
     console.log('clicked'); 
    } 
}); 

simulateClick(ele); 

FIDDLE

1

आप के बारे में क्या है या नहीं एक घटना उपयोगकर्ता द्वारा या कोड से ट्रिगर था चिंतित हैं, तो शायद आप चाहिए एक विधि निकालें और उस विधि को सीधे कॉल करें। फिर आप userTriggered पैरामीटर जोड़ सकते हैं और सही या गलत पास कर सकते हैं।

$(ele).on("click", function(e){ 
    doWork($(this), e, true); 
} 

doWork($(ele), null, false); 

function doWork(item, e, userTriggered) 
{ 
    if(userTriggered) { 
    } 
    else { 
    } 
} 

तब जब आप अपने doWork विधि का परीक्षण, आप userTriggered के रूप में सही या गलत में पास वांछित व्यवहार का परीक्षण कर सकते हैं। यह आपके परीक्षण से ब्राउज़र व्यवहार की निर्भरता को भी समाप्त करता है, जो एक अच्छी बात है।

+0

सामान्य तौर पर यह एक अच्छा विचार है, लेकिन क्यों अधिक सिर्फ परीक्षण के लिए कोड modularize यह इस एकमात्र उद्देश्य .. – adardesign

+1

मैं के लिए एक बेहतर तरीके से किया जा सकता है अगरतर्क देगा कि यह विधि उपयोगकर्ता क्लिक को अनुकरण करने से स्पष्ट है। यह किसी ईवेंट हैंडलर की अनावश्यक ट्रिगरिंग को हटा देता है और आपको आवश्यक कार्यक्षमता को सीधे कॉल करने की अनुमति देता है। न केवल यह अधिक कुशल है, लेकिन इसे पढ़ना आसान है। – cadrell0

+0

मैंने सुना है! फिर भी धन्यवाद! – adardesign

1

@ adeneo का जवाब मुझे त्रुटियों दे दी है। (Uncaught TypeError: 'MouseEvent' चालू 'initMouseEvent' निष्पादित करने में विफल:। पैरामीटर 4 नहीं प्रकार 'विंडो' की है)

इस विधि मेरे लिए काम किया (हालांकि isTriggered है अपरिभाषित, झूठी नहीं)

$('#myBtn').on('click', function(e){ 
 
    alert('isTrigger: ' + e.isTrigger) 
 
}); 
 

 
var event = new Event('click'); 
 
$("#myBtn")[0].dispatchEvent(event);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a href="#" id="myBtn">dude</a>

संबंधित मुद्दे