2012-03-06 18 views
44

के साथ event.data सेट कर सकते हैं jquery .on() के साथ आप ईवेंट डेटा सेट करने के लिए एक वैकल्पिक पैरामीटर पास कर सकते हैं। क्या आप इसे ट्रिगर के साथ भी कर सकते हैं?क्या आप jquery ट्रिगर

उत्तर

24

मुझे आशा है कि मुझे आपको गलत नहीं मिलेगा, लेकिन क्या आपका मतलब trigger विधि के साथ अतिरिक्त डेटा पास करना है?

$(app.Model).trigger("foo", additionalData); 

और कहीं और ...

$(app.Model).on("foo", callback); 

var callback = function(event, additionalData) { 
    console.log(additionalData); 
} 

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

app.Model मैं ब्रांड्स में उपयोग करता हूं वह ऑब्जेक्ट है जो किसी ईवेंट को ट्रिगर करना चाहिए और यह उस ईवेंट को भी सुनता है। इसे एक नामस्थान के रूप में सोचें। आप हमेशा document, किसी भी डॉम चयनकर्ता या यहां तक ​​कि ऑब्जेक्ट की तरह भी ऑब्जेक्ट कर सकते हैं, बस सुनिश्चित करें कि trigger और on दोनों को समान ऑब्जेक्ट का उपयोग करना चाहिए (यानी, DOM तत्व जो डीओएम से हटाए गए हैं अस्थायी रूप से त्रुटि-प्रवण हैं) ।

+1

+1 आपके लिए, दस्तावेज़ वास्तव में इस अतिरिक्त डेटा तक पहुंचने का उल्लेख नहीं करते हैं। –

14

आप इस तरह से कर सकते हैं: -

उदाहरण

//Create a new jQuery.Event object without the "new" operator. 
    var e = jQuery.Event("click"); 

    // trigger an artificial click event 
    jQuery("body").trigger(e); 

आप एक ही दृष्टिकोण के साथ event.data भी पारित कर सकते हैं। इसका संदर्भ लें Event Object

+0

क्या आप इस उदाहरण के साथ event.data को पास करने के लिए कोड उदाहरण के साथ दिखा सकते हैं? – user570605

+0

var e = jQuery.Event ("क्लिक करें"); e.data = "एक अच्छा डेटा"; jQuery ("बॉडी")। ट्रिगर (ई); – Dorad

+1

यह प्रश्न इस प्रश्न के लिए ** सही ** उत्तर है। अन्य "उत्तर" हैक हैं। – vsync

0

हां। प्रलेखन कहते हैं:

.trigger (eventType [, extraParameters])

नोट अतिरिक्त पैरामीटर हम यहाँ से गुजर रहे हैं और .bind() विधि के लिए eventData पैरामीटर के बीच का अंतर। दोनों इवेंट हैंडलर को जानकारी उत्तीर्ण करने के लिए तंत्र हैं, लेकिन extraParameters.trigger() पर तर्क को ईवेंट ट्रिगर होने पर निर्धारित करने की अनुमति देता है, जबकि eventData.bind() पर तर्क की आवश्यकता होती है जब हैंडलर बाध्य होने पर पहले से ही गणना की जानी चाहिए ।

2

मैं एक वैकल्पिक हल पता है कि हम इस

$("button").on("click", function(event) { 
    event.data = $(this).data('events'); // get the data value 
    alert(event.data); //use your data as you want 
}); 


//Now set the data value and trigger 
$("button").data('events','youreventsvalue').trigger("click"); 

यहाँ के लिए उपयोग कर सकते हैं एक demo

+0

यह एक वैध समाधान है। डाउनवोट क्यों? – Starx

0

jQuery साइट में है आप trigger समारोह के लिए घोषणा देख सकते हैं: .trigger(eventType [, extraParameters])

extraParameters एक सरणी या एक वस्तु होना चाहिए और आपको इन वस्तुओं को तर्क के साथ प्राप्त करने की अनुमति होगी [1+] (तर्क [0] है घटना वस्तु के बराबर)।

तो, यहाँ एक उदाहरण है:

$('#foo').bind('custom', function(event) { 
    if (arguments.length > 1) { 
    $.each(arguments, function(i,arg){ 
     alert("element " + i + " is " + arg); 
    }) 
    } 
}); 

$('#foo').trigger('custom', ['Custom', 'Event', { 'test' : 'attr from object' }, 123]); 
0

जहाँ तक मुझे पता है, एक ही dataObject है कि आप के साथ परिभाषित मूल:

$('selector').on('eventName', dataObject , functionName) 

भी जब आप `$ का उपयोग भी भेजे जाएंगे ('चयनकर्ता')। गति प्रदान ('घटनानाम')।

आप पैरामीटर (उनके उत्तरों में अन्य उल्लेखों की तरह) भी पास कर सकते हैं लेकिन उन पैरामीटर अतिरिक्त तर्क होंगे (आपके पास dataObject होगा जो आपने .on() फ़ंक्शन में सेट किया है)।

+0

अच्छा बिंदु। यह उल्लेखनीय है कि डेटा ऑब्जेक्ट घटना की डेटा प्रॉपर्टी द्वारा पहुंचा जा सकता है। इस फ़ंक्शन की तरह कुछ (ई) {console.log (e.data)} –

11

यह वह दृष्टिकोण था जिसे मैंने लिया था।

$('#foo').on('click', { init: false }, function(e, data) { 
     data = data || e.data; 
     console.log(data.init); // will be true in the trigger, and false in the click. 
    }) 
    .trigger('click', { init: true }); 
57

लघु उत्तर:

कर सकते हैं ट्रिगर() पास अपने ईवेंट हैंडलर्स के लिए डेटा? हाँ (के रूप में अतिरिक्त पैरामीटर)

ट्रिगर() event.data में पास डेटा सीधे आपत्ति कर सकते हैं? नहीं (केवल पर () करता है)

// Using this will pass myData to every event handler as the second parameter. 
trigger('myEvent', [myData]) 
// Instead of this 
on('myEvent', function(evt) {...}); 
// You would do this 
on('myEvent', function(evt, myData) {...}); 

लांग उत्तर

ट्रिगर() विधि 5 मुख्य काम करता है।

  1. यह प्रकार और वैकल्पिक नाम स्थान आप इसे देने के साथ एक JQueryEventObject बनाता
  2. यह भेजता है या एक विशेष प्रकार का है कि डोम अप यात्रा जब तक यह शीर्ष तक पहुँच जाता है या उसके प्रचार बंद कर दिया है की एक घटना का उत्सर्जन करता है।
  3. यह उस प्रकार की घटना के लिए ईवेंट हैंडलर के हस्ताक्षर को परिभाषित करता है।
    • समारोह (घटना) {...} डिफ़ॉल्ट
  4. है यह उन संचालकों को पहले पैरामीटर के रूप घटना गुजरता
  5. यह (वैकल्पिक) घटना के किसी भी संचालकों में अतिरिक्त पैरामीटर गुजरता
    • समारोह (घटना, additionalParams) {}

संख्या 3 और 5 आपके लिए सबसे महत्वपूर्ण और प्रासंगिक हैं। चूंकि आप इस घटना को संभालने के लिए एपीआई को स्पष्ट रूप से परिभाषित करते हैं, इसलिए आप इस बात को सुसंगत बनाना चाहते हैं कि आप ईवेंट कैसे ट्रिगर करते हैं ताकि आपके कोड का उपयोग करने वाले लोग इस बात का पालन कर सकें कि वे इसका उपयोग कैसे करते हैं।

jQuery(document).on('eventName' {eventData1: 'foo', eventData2: 'bar'}, function (evt, extraParam1, extraParam2) { 
    //This code runs when the event is triggered 
    console.log(evt.data.eventData1) // foo 
    console.log(evt.data.eventData2) // bar 
    console.log(extraParam1) // 'extra param 1' 
    console.log(extraParam2) // 'extra param 2' 
}); 

jQuery(document).trigger('eventName', ['extra param 1', 'extra param 2']); 

तो बस याद रखें:

उदाहरण 1 संगति

function Car(speed, tires, brakes) { 
    this.speed = speed; 
    this.tires = tires; 
    this.brakes = brakes; 
} 

Car.prototype.brake = function(amount) { 
    // You can do this (Event handler will have access to these parameters) 
    car.trigger('brake.car', [this.speed, this.brakes, this.tires, amount]) 
    // Or this (Event handler will have access to these parameters) 
    car.trigger('brake.car', [this, amount]) 
    // but try not to mix and match with the same event type 
} 
... 
//This is the first way from above (choose one or the other, but don't mix and match). 
passenger.on('brake.car', {person: passenger}, function(evt, carSpeed, carBrakes, carTires, brakeAmount){ 
    if(brakeAmount > 50) 
     passenger.hangOnTight(); 
    } 
}) 

... 
// This is the second way from above (choose one or the other, but don't mix and match). 
passenger.on('brake.car', function(evt, car, brakeAmount){ 
    if(brakeAmount > 50) 
     passenger.hangOnTight(); 
    } 
}) 

उदाहरण 2 यहाँ)) ठेठ दोनों ट्रिगर (दिखा उदाहरण और पर (है।

  • .trigger(): घटना, आदि लगातार फेंकना और पैरामीटर 2, 3 को परिभाषित करता है, तो
  • .on जरूरत(): घटना डोम खलबली मचाने वाले है। कुछ सामान करें, ईवेंट डेटा में जोड़ें या उपयोग करें और जोड़े गए ट्रिगर करने वाले अतिरिक्त पैरा का उपयोग करें।
+2

उत्कृष्ट उत्तर। –

+0

अच्छा जवाब लेकिन मैं इसका उपयोग करने में असमर्थ हूं जबकि मेरा डीओएम तत्व गतिशील रूप से (AJAX कॉल) जोड़ा गया है .. बहुत खराब – Delphine

0

मुझे इसके पीछे दर्शन को समझने में थोड़ी देर लग गई। एक कार्यक्रम में दो इकाइयां शामिल हैं: श्रोता और प्रेषक। event.data फ़ील्ड केवल श्रोता द्वारा उपयोग किया जाने का इरादा था। यह एक तरह से एक फोन नंबर के लिए एक नाम बताए की तरह है:

$("(818)548-2733").on("incomingcall", null, "Mom", pickup); 

आप फोन उठाओ और दूसरी तरफ है कि वह अपने माँ है आपको बताने के लिए के लिए प्रतीक्षा कर सकते हैं। या आप इस घटना से संबंधित अतिरिक्त जानकारी संलग्न करने के लिए event.data का उपयोग कर सकते हैं।

$.trigger और $.triggerHandler विधियों को किसी ईवेंट के प्रेषक पक्ष द्वारा बुलाया जाता है। यही कारण है कि वे आपको event.data निर्दिष्ट नहीं करते हैं। इसके बजाय, आप उनके extraParameters तर्क का उपयोग कर सकते हैं।

0
$("pressedButton").on("click", function(event) { 
    var buttonID = $(this).data('buttonID'); 
    alert(buttonID); // alerts 'save' string passed as an argument 
}); 

$("pressedButton").data('buttonID','save').trigger("click"); 
+0

यह मान्य समाधान है। इसका प्रयोग करें, यह समान तरीके है ;-) –

+0

... और एक सुपर खतरनाक तरीका है। क्या होगा यदि दबाए गए बटन पर पहले से डेटा है? यह पिछले डेटा आइटम्स को सुरक्षित रखने के लिए कुछ भी नहीं करता है। – dudewad

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