2012-06-29 10 views
6

में पैरामीटर के रूप में ईवेंट को कैसे पास करें हाय मैं JQuery सीख रहा हूं और मैंने एक छोटा फ़ंक्शन लिखा है जहां मैं बटन के क्लिक ईवेंट के साथ फ़ंक्शन संलग्न कर रहा हूं।JQuery फ़ंक्शन

इस

यह HTML

<input id="Button1" type="button" value="button" /> 

<div id = "displayArea" style="border:2px solid black; width:300px; height:200px"> 

इस कोड को ठीक काम करता है का मुख्य भाग है एचटीएमएल

<script type="text/javascript"> 

    $(pageLoaded); 

    function pageLoaded() 
    { 
     $("#Button1").bind("click", 
          { key1: "value1", key2: "value2" }, 
          function buttonClick(event) 
          { 
           $("#displayArea").text(event.data.key1); 
          } 
          ); 
    }      

</script> 

के प्रमुख तत्व है। लेकिन जब मैं अनामिक विधि के बाहर बटनक्लिक फ़ंक्शन लिखने का प्रयास करता हूं, तो यह अब और काम नहीं करता है।

$("#Button1").bind("click", 
        { key1: "value1", key2: "value2" }, 
        buttonClick(event)); 

function buttonClick(var event) 
{ 
     $("#displayArea").text(event.data.key1); 
} 

यह काम नहीं कर रहा:

मैं इसे इस तरह से कॉल करने की कोशिश। क्या मैं पैरामीटर के रूप में इवेंट पास करते समय कुछ गलती कर रहा हूं? अनाम विधियों का उपयोग किये बिना इसे करने का सही तरीका क्या है?

उत्तर

9

आप एक function reference क्लिक हैंडलर के रूप में पारित करने के लिए की जरूरत है, लेकिन आप यहाँ क्या कर रहे

$("#Button1").bind("click", 
        { key1: "value1", key2: "value2" }, 
        buttonClick(event)); 

तुरंत buttonClick(event) बुला और जो return undefined और सेट किया जाता है कि के रूप में click handler। आपको buttonClick जैसे फ़ंक्शन संदर्भ पास करना होगा और आपको ईवेंट पैराम स्वचालित रूप से प्राप्त होगा (हैंडलर को कॉल करते समय jQuery उसे भेज देगा)।

पूर्ण कोड:

$(function(){ 
    $("#Button1").bind("click", 
        { key1: "value1", key2: "value2" }, 
        buttonClick); 

    function buttonClick(event) 
    { 
     $("#displayArea").text(event.data.key1); 
    } ​ 
}); 

डेमो:http://jsfiddle.net/joycse06/cjc9r/


अद्यतन (@ Tadeck की टिप्पणी के आधार पर):

आपका कोड अगर आप ठीक से काम करेंगे function expression एल का उपयोग करें आइक इस

var buttonClick = function(event){ 
    $("#displayArea").text(event.data.key1); 
}; 

और तुम अपने first use ऊपर इस जगह के लिए की है। पहले

$("#Button1").bind("click", ... 

function expressions क्योंकि इस मामले में function declaration की तरह वर्तमान क्षेत्र के शीर्ष पर hoisted नहीं हैं। तो आप only afterexpressionJS interpreter द्वारा only after का उपयोग कर सकते हैं।

+0

+1 द्वारा स्वचालित रूप से पारित हो जाएगा। –

+1

+1। यह उल्लेखनीय है कि यदि आप इस जवाब में कार्य को परिभाषित करते हैं, तो सब कुछ काम करेगा। लेकिन यदि आप इस तरह के फ़ंक्शन को परिभाषित करते हैं: 'var buttonClick = function (event) {...}', परिभाषा को "फ़ंक्शन रेफरेंस" का उपयोग करने से पहले रखा जाना चाहिए (इस मामले में: '$ (" # से पहले बटन 1 ")। बांधें (...) 'आह्वान किया गया है)। – Tadeck

+0

@Tadeck, धन्यवाद सर, क्या मैं इसे अपने उत्तर में जोड़ सकता हूं? –

1

वहाँ अपने समाधान में दो गलतियों को आप बदलना

var केवल एक नहीं चर एक समारोह

function buttonClick(event) 
{ 
    $("#displayArea").text(event.data.key1); 
} 

की एक पैरामीटर परिभाषित करने के लिए दूसरी बात जिस तरह से आप बताए रहे हैं प्रयोग किया जाता है होगा रहे हैं घटना हैंडलर। आप buttonClick(event) का रिटर्न मान असाइन कर रहे हैं जो undefined होगा। बस इसे कार्य पास करें।event वस्तु पहले व्यक्ति वास्तव में समझाने के लिए वे गलत क्या कर रहे थे, बल्कि कोड सिर्फ पोस्टिंग से होने के लिए jQuery

$("#Button1").bind("click", 
        { key1: "value1", key2: "value2" }, 
        buttonClick); 
+0

स्पष्टीकरण के लिए एंड्रियास धन्यवाद! –

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