2012-01-29 17 views
5

मैं वर्तमान तत्व की आईडी को अलर्ट करने के लिए निम्न कोड का उपयोग कर रहा हूं।वर्तमान तत्व की चेतावनी आईडी

<input type="text" id="desc" name="txtTitle" onclick="fun()"> 

jQuery:

function fun() { 
    var currentId = $(this).attr('id'); 
    alert(currentId); 
} 

ऐसा क्यों है "अनिर्धारित" सचेत करता है? मैं के साथ की कोशिश की है:

var currentId =$('element').attr('id'); 
// and 
alert($(this).id); 
// and 
alert(this.id); 

लेकिन यह अलर्ट undefined

+1

यदि आपने ऑनक्लिक हैंडलर जोड़ने के लिए jQuery का उपयोग किया है, तो आप यह नहीं पूछेंगे। :) – epascarello

उत्तर

4

करने के लिए इसे बदलने का प्रयास करें:

<input type="text" id="desc" name="txtTitle" onclick="fun.call(this)"> 

बेहतर, jQuery के साथ अपने ईवेंट हैंडलर बाँध, तुम वैसे भी यह प्रयोग कर रहे हैं के बाद से:

$(function() { $('#desc').click(fun); }); 

आपका कोड काम नहीं करने का कारण टी है टोपी आप अपने "ऑनक्लिक" विशेषता के लिए ब्राउज़र द्वारा निर्मित ईवेंट हैंडलर फ़ंक्शन के अंदर से fun() पर कॉल कर रहे हैं। इस तरह के फ़ंक्शन को कॉल करके, आप this के लिए कुछ भी "रिसीवर" ऑब्जेक्ट — प्रदान नहीं करते हैं। यदि आप इसे .call() के साथ कॉल करते हैं, तो आप स्पष्ट रूप से ऐसा कर सकते हैं।

1

यदि आप onclick ईवेंट पर स्ट्रिंग पास करते हैं, तो उस स्ट्रिंग में कोड निष्पादित किया जाएगा। यदि यह किसी अन्य फ़ंक्शन को कॉल करता है, तो this परिभाषित नहीं किया जाएगा।

या तो तैयार दस्तावेज पर

$("#desc").click(fun) 

करते हैं, या यदि आप एक तर्क के रूप में इनलाइन घटनाओं, पास this साथ काम करना चाहिए विधि नुकीले द्वारा दिखाए गए का उपयोग करें।

9

$(this) केवल jQuery कार्यों के अंदर काम करता है; यह fun() के अंदर कुछ भी संदर्भ नहीं देता है। इस HTML के साथ

$('input#desc').click(function() { 
    alert($(this).attr('id')); 
}); 

: इसके बजाय, इस कोशिश

<input type="text" id="desc" name="txtTitle"> 

यह विशेष रूप से अच्छा अभ्यास अपने HTML में onClick="" विशेषताओं, इसलिए $.click() समारोह ऊपर दिए गए है करने के लिए नहीं है। आपको हमेशा अपनी जावास्क्रिप्ट को एक अलग फ़ाइल में रखना चाहिए (खासकर जब jQuery का उपयोग करते समय)।

1

बदलें तत्व कहने के लिए:

onclick="fun(this)" 

और करने के लिए समारोह:

function fun(elem) 
{ 
    var currentId = $(elem).attr("id"); 
} 
0

है ऐसा इसलिए है क्योंकि आप वैश्विक क्षेत्र में this कहा जाता है।

jQuery के बिना

, तो आप नीचे की तरह कर सकते हैं: jQuery के साथ

<input type="text" id="desc" name="txtTitle" onclick="fun(this)"> 

function fun(el) { 
    alert(el.id); 
} 

, तो आप नीचे की तरह कर सकते हैं:

<input type="text" id="desc" name="txtTitle"> 

$(function(){ 
    $('input[type="text"]').click(function(){ 
     alert(this.id); 
    }); 
}); 
1

का उपयोग तुम बस alert(event.target.id); उपयोग कर सकते हैं फ़ंक्शन के अंदर जो आपके तत्व द्वारा फ़ंक्शन पर कोई तर्क पारित किए बिना बुलाया जाता है।

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