2013-04-09 11 views
29

को तर्क गुजर रहा है निम्न स्क्रिप्ट जो काम नहीं करता हैjQuery .on() विधि - ईवेंट हैंडलर समारोह

<script type="text/javascript" > 

    function ADS(e){ alert(e); } 

    $(document).ready(function(){ 
      $(document).on("dblclick","#an_tnam tr", ADS('hello')); 
      $(document).on("dblclick","#kv_tnam tr", ADS('world')); 
      // .... 
}); 

</script> 

मैं ईवेंट हैंडलर समारोह एडीएस के लिए तर्क कैसे पारित कर सकते हैं?

+0

आपका सबसे अच्छा शर्त निश्चित रूप से हो सकता है, इस मामले में, यह एक गुमनाम समारोह के रूप में चलाने के लिए होता है, कुछ की तरह यहाँ का वर्णन किया है। $ ('। El')। ('क्लिक', फ़ंक्शन() { कॉलबैक ('तर्क') }); –

उत्तर

44

.on() फ़ंक्शन फ़ंक्शन संदर्भ पारित होने की अपेक्षा करता है; आप जो कर रहे हैं वह फ़ंक्शन को कॉल कर रहा है और इसके रिटर्न वैल्यू को पास कर रहा है। यदि आपको पैरामीटर पास करने की आवश्यकता है तो आपको कॉल को अज्ञात फ़ंक्शन में लपेटना होगा।

$(document).on('dblclick', '#an_tnam tr', function(event) { 
    ADS('hello'); 
}); 

jQuery हमेशा अपने सामान्यीकृत ईवेंट ऑब्जेक्ट को निष्पादित करने के लिए पहले तर्क के रूप में पास करता है।

+4

बेशक, यदि कार्य 'एडीएस()' वास्तव में एक फ़ंक्शन ऑब्जेक्ट लौटाता है, तो सबकुछ ठीक होगा। – Blazemonger

+0

क्षमा करें, लेकिन इसे कम करना था क्योंकि यह उत्तर वास्तविक प्रश्न का उत्तर नहीं देता है, बस एक और मुद्दा हल करता है। –

+0

@ViniciusTavares को डाउनवॉटिंग के लिए माफ़ी मांगने की ज़रूरत नहीं है, हालांकि अगर आप वास्तव में समझाते हैं कि * क्यों * आपको लगता है कि मैं इसे पसंद करूंगा। –

3
function ADS(e){ alert(e); } 

$(document).ready(function(){ 
      $(document).on("dblclick","#an_tnam tr", function (e) { ADS('hello') }); 

}); 

चाल करेगा।

3
function ADS(e) { 
    return function() { 
     alert(e); 
    }; 
} 

कि जैसे जब आप

$(document).on("dblclick","#an_tnam tr", ADS('hello')); 

कर रहे हैं, यह वापस आ समारोह है कि ईवेंट हैंडलर के रूप में निर्दिष्ट किया जाए (और अपने स्ट्रिंग तर्क पारित हो जाता है जब आप हैंडलर बताए रहे हैं, नहीं जब इसे कहते हैं)।

5

Anthony Grist ने बताया, .on() विधि उस भाग पर फ़ंक्शन संदर्भ की अपेक्षा कर रही है; आप एक ऐसे फ़ंक्शन का मूल्यांकन कर रहे हैं जो कुछ भी नहीं लौटाता (null)।

हालांकि, जावास्क्रिप्ट की एक मजेदार विशेषता यह है कि सब कुछ एक वस्तु है, जिसमें कार्य शामिल हैं। एक छोटा सा संशोधन के साथ, आप ADS() बदलने एक गुमनाम समारोह वस्तु के बजाय वापस जाने के लिए कर सकते हैं:

function ADS(e){ 
    return function(){ alert(e); }; 
} 

http://jsfiddle.net/cSbWb/

84

आप एक घटना से निपटने के कार्य करने के लिए अतिरिक्त डेटा पारित कर सकते हैं और हैंडलर भीतर event.data का उपयोग कर पहुँचा जा सकता है।

$(document).on('dblclick', '#an_tnam tr', { extra : 'random string' }, function(event) 
{ 
    var data = event.data; 

    // Prints 'random string' to the console 
    console.log(data.extra); 
} 

तुम भी जब किसी बाहरी स्रोत से घटना को ट्रिगर .trigger() विधि

$('#an_tnam tr').trigger('click', [{ extra : 'random string' }]); 

ट्रिगर विधि से गुजर डेटा के साथ अंतर का उपयोग कर आप की तरह किसी भी घटना के लिए अतिरिक्त डेटा भेज सकते हैं कि यह उम्मीद है हैंडलर को पारित सरणी की लंबाई के अतिरिक्त तर्क लेने के लिए। उपर्युक्त उम्मीद है कि हैंडलर को पास करने के लिए एक अतिरिक्त तर्क प्राप्त होगा।

$('#an_tnam tr').on('click', function(event, obj) 
{ 
    // Prints 'random string' to the console 
    console.log(obj.extra); 
} 
+12

जहां तक ​​मैं देख सकता हूं, यह केवल एकमात्र है जवाब है कि वास्तव में पूछे गए सवाल का जवाब देते हैं। –

+0

'console.log (data.extra); <<- क्या आपका मतलब है, पहले उदाहरण में? और दूसरे 'console.log (obj.extra) में; 'मददगार हो सकता है। –

+0

@ बॉबस्टिन-विस्बीबोन मैंने स्पष्ट किया है कि स्पष्टीकरण में मदद के लिए। –

2

वास्तव में, इस लक्ष्य को हासिल करने के लिए एक बहुत ही साफ सरल तरीका है, कोई अतिरिक्त अव्यवस्था और कोई गुमनाम कार्यों के साथ है, जे एस बाँध() का उपयोग कर:

$(document).on('dblclick', ADS.bind(null, 'hello')); 

पहले पैरामीटर मान है आप चाहते हैं "इस" करने के लिए कॉलबैक समारोह के अंदर है।मोज़िला डेवलपर नेटवर्क में

और जानकारी: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind

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