2012-03-06 7 views
5

मैं निम्नलिखित कोड है कि हर बार एक तत्व परिवर्तन मेरी वेब फार्म के भीतर होता है काम करता है:jQuery का उपयोग करें और कैसे 'इस' पर कब्जा करने की बदली हुई फ़ॉर्म तत्व मूल्य

<!-- 

jQuery.support.cors = true; // needed for ajax to work in certain older browsers and versions 

$(document).ready(function(){ 

    $(this).change(function(){ 
     alert('form element changed!'); 
    }); 

}); // end .ready() 

//--> 

क्या मैं के साथ संघर्ष कर दिया गया है फॉर्म फील्ड तत्वआईडी, नाम और बदली हुई मूल्य जब परिवर्तन घटना शुरू हो रहा है पर कब्जा करने के लिए कैसे है।

क्या कोई इस पर मेरी सहायता कर सकता है?

धन्यवाद!

** JavaScript फ़ाइल **

// Sarfraz 
$(this).change(function(){ 
    var id, name, value; 
    id = this.id, name = this.name, value = this.value; 
    alert('id=' + id); // this returns 'undefined' 
    alert('name=' + name); // this returns 'undefined' 
    alert('value=' + value); // this returns 'undefined' 
}); 
// 

// rjz 
$(this).change(function(){ 
    var $this = $(this), 
    id = $this.attr('id'), 
    name = $this.attr('name'), 
    value = $this.val(); 

    alert(id); // this returns 'undefined' 
    alert(name); // this returns 'undefined' 
    alert(value); // this returns blank 
}); 

// Jamie 
$(this).change(function(){ 
    var id = $(this).attr('id'); 
    var name = $(this).attr('name'); 
    var value = $(this).attr('value'); 

    alert('id=' + id); // this returns 'undefined' 
    alert('name=' + name); // this returns 'undefined' 
    alert('value=' + value); // this returns 'undefined' 
}); 
// 

//James Allardice 
$(this).change(function(e) { 
    var elem = e.target; 
    alert('elem=' + elem); // this returns 'objectHTMLTextAreaElement' 
}); 
// 

// Surreal Dreams 
$("#my-form input").change(function(){ 
    alert('form element changed!'); 
    var value = $(this).val(); 
    var id = $(this).attr("id"); 
    var name = $(this).attr("name"); 

    alert(id); // nothing happens 
    alert(name); // nothing happens 
    alert(value); // nothing happens 
}); 
// 

//Jamie - Second Try 
$('.jamie2').each(function() { 
    $(this).change(function(){ 
     var id = $(this).attr('id'); 
     alert(id); // nothing happens 
    }); 
}); 
// 
+1

आपके उदाहरण में 'यह' क्या है? – jrummell

+0

"यह" जावास्क्रिप्ट में एक आरक्षित शब्द है, सही? –

+0

हां, लेकिन इसका अर्थ प्रासंगिक है। – jrummell

उत्तर

4

जहाँ तक मुझे यह समझ के रूप में, this एक form तत्व को संदर्भित करता है और आप के लिए एक संदर्भ प्राप्त करना चाहते हैं उस form तत्व के वंशज जो घटना को ट्रिगर करते थे।

$(this).change(function(e) { 
    var elem = e.target; 
}); 

यहाँ एक working example है:

अगर यह सही है, आप घटना वस्तु की target संपत्ति का उपयोग कर सकते हैं।

उपरोक्त कोड में, elem उस घटना को संदर्भित करेगा जो ईवेंट को ट्रिगर करता है।फिर आप इस तरह के id के रूप में है कि तत्व के गुणों का उपयोग कर सकते,:

$(this).change(function(e) { 
    var elemId = e.target.id; 
}); 
+0

जब मैंने आपके नमूने की कोशिश की तो मुझे 'objectHTMLTextAreaElement' मिला। मेरे प्रश्न में संलग्न कोड देखें। –

+0

@ डॉ डीओटी - 'अलर्ट (e.target.id) आज़माएं; '। 'e.target' आपको वास्तविक तत्व प्राप्त करता है। इसके बाद आप इसके गुणों का उपयोग कर सकते हैं। मैंने अपना जवाब एक और उदाहरण के साथ अपडेट किया है। –

+0

याहू @ जेम्स आल्डार्डिस। तुमने मुझे अब तक का सबसे नज़दीकी बना दिया है। मैंने अभी आईडी नाम देखा है। मैं आपके नमूने के साथ कुछ के आसपास खेलने जा रहा हूँ। मैं वापस रिपोर्ट करूंगा। तुम एक सितारा हो। तो यहां हर कोई है जो यहां चिंतित है। सबको धन्यवाद!!! –

5

मुझे लगता है कि आप शुरू से ही एक समस्या है हो सकता है:

$("#myform input").change(function(){ 
    alert('form element changed!'); 
    var value = $(this).val(); 
    var id = $(this).attr("id"); 
    var name = $(this).attr("name"); 
}); 

आप $ (this) के साथ शुरू करने के लिए नहीं करना चाहते हैं, तो आप उन इनपुट का चयन करने की आवश्यकता है जिन्हें आप मॉनिटर करना चाहते हैं। फिर आप परिवर्तन() फ़ंक्शन के अंदर $ (यह) का उपयोग कर सकते हैं।

जेम्स अलार्डिस ने बताया कि आप $ (इस) के साथ फॉर्म का जिक्र कर रहे हैं, और परिवर्तन() घटना फॉर्म में सभी बदलावों को पकड़ लेगी। मेरा सुझाव है कि आप अपने बदले गए तत्वों को अधिक विशेष रूप से लक्षित करें ताकि आप उन तत्वों पर परिवर्तन ईवेंट नहीं देख रहे हैं जिनकी आपको आवश्यकता नहीं है या नहीं, जो अप्रत्याशित व्यवहार को खत्म कर सकता है। आप उन्हें :input जैसे वर्ग या फॉर्म चयनकर्ता के साथ लक्षित कर सकते हैं।

+0

पर प्रतिक्रिया व्यक्त की है, मैं डॉ। डीओटी अतिरिक्त जानकारी प्रदान करता हूं कि आप क्यों करेंगे विशेष इनपुट के बजाय "इस" में परिवर्तन को बांधना चाहते हैं। ;-) मैं '$ (यह) .change()' के लिए एक अच्छा उपयोग केस नहीं सोच सकता, लेकिन इसका मतलब यह नहीं है कि कोई भी नहीं है। –

+0

@ ग्रेगेटीट - चूंकि 'यह' एक 'फॉर्म' तत्व को संदर्भित करता है, इसलिए आप इसे 'चेंज' इवेंट हैंडलर से जोड़ सकते हैं और यह किसी भी वंशज द्वारा ट्रिगर किए गए परिवर्तन ईवेंट को कैप्चर करेगा (क्योंकि वे 'फॉर्म' पर बबल होंगे)। एक चयनकर्ता तर्क के साथ 'on' का उपयोग करने की तरह। मेरा जवाब देखें –

+0

यदि डॉ। डीओटी कुछ स्पष्टीकरण प्रदान करता है, तो मैं एक अपडेट करना सुनिश्चित कर दूंगा। डॉ। डीओटी पर एक टिप्पणी टॉस करें ताकि मुझे इसे जांचने के लिए एक नोट मिल सके। –

1

आप अपने परिवर्तन के अंदर निम्नलिखित की तरह कुछ करना होगा

var ELEMEMT = $('#IDOFELEMENT').val(); 
+0

मेरी मदद करने के लिए बहुत बहुत धन्यवाद। मैं जेम्स अलार्डिस के 'e.target.id' उत्तर के माध्यम से भी जो कुछ भी सेट करता हूं उसे प्राप्त करने में सक्षम था। मैं आपकी सहायता की बहुत सराहना करता हूं। सादर। –

1

इस प्रकार आप सीधे गुण का उपयोग कर सकते हैं:

$(this).change(function(){ 
    var id = this.id, 
    name = this.name, 
    value = this.value; 
}); 

वैकल्पिक रूप से, jQuery प्रदान करता सहायक पहले से इन गुणों को पुनः प्राप्त करने कार्यों एक jQuery संग्रह में तत्व:

$(this).change(function(){ 
    var $this = $(this), 
    id = $this.attr('id'), 
    name = $this.attr('name'), 
    value = $this.val(); 
}); 
+0

आपका पहला उदाहरण सरफ्राज़ के समान है। आपका दूसरा उदाहरण मैंने भी परीक्षण किया। दोनों नमूने अपरिभाषित लौटते हैं। मेरे प्रश्न में मेरा जेएस कोड देखें। –

+0

मेरी मदद करने के लिए बहुत बहुत धन्यवाद। मैं जेम्स अलार्डिस के 'e.target.id' उत्तर के माध्यम से भी जो कुछ भी सेट करता हूं उसे प्राप्त करने में सक्षम था। मैं आपकी सहायता की बहुत सराहना करता हूं। सादर। –

1

jQuery के साथ प्रयास 1,7

$(document).on('change','#myID',function(){ 
    alert('Id:'+this.id+'\nName:'+this.name+'\nValue:'+this.value); 
});​ 

DEMO

+0

मुझे लगता है कि #myID मेरे

टैग आईडी के संदर्भ में है। सही बात? यदि ऐसा है, तो मैंने आपके सुझाव को थकने पर कुछ भी नहीं लौटाया। –

+0

मेरी मदद करने के लिए बहुत बहुत धन्यवाद। मैं जेम्स अलार्डिस के 'e.target.id' उत्तर के माध्यम से भी जो कुछ भी सेट करता हूं उसे प्राप्त करने में सक्षम था। मैं आपकी सहायता की बहुत सराहना करता हूं। सादर। –

1

यहाँ है कैसे:

$(this).change(function(){ 
    var id, name, value; 
    id = this.id; name = this.name; value = this.value; 
}); 
+0

धन्यवाद @ सर्फ्राज़। मैंने कुछ दिन पहले आपके संस्करण की कोशिश की, लेकिन इसे एक और शॉट दिया। मेरा कोड देखें जो मेरे प्रश्न में संलग्न है। सभी तीन तत्व "अपरिभाषित" लौटते हैं। –

+0

@ डॉ डीओटी: आपको यह भी स्पष्ट करना होगा कि यह आपके कोड में क्या संदर्भित करता है, कौन सा HTML तत्व और यह कोड तक कैसे पहुंचता है। – Sarfraz

+0

"यह" जावास्क्रिप्ट में एक आरक्षित शब्द है, सही? –

2

आदेश में $ (this) उपयोग करने के लिए, आप एक पूर्वनिर्धारित जावास्क्रिप्ट वस्तु होना आवश्यक है। यही कारण है कि इसे कहा जाता है यह

तो तुम कुछ इस तरह करने की जरूरत है:

$('.class_name').each(function() { 
    $(this).change(function(){ 
     var id = $(this).attr('id'); 
    }); 
}); 

या

$('.class_name').click(function() { 
    $(this).change(function(){ 
     var id = $(this).attr('id'); 
    }); 
}); 

संक्षेप में, आप इससे पहले कि आप $ (this) का उपयोग कर सकते एक तत्व का चयन और एक वस्तु बनाने के लिए की जरूरत है।

+0

@ जैमी। आपका प्रत्येक नमूना कोड 'अपरिभाषित' लौटाता है। मेरे प्रश्न में संलग्न कोड देखें। –

+0

मैंने अपना प्रश्न संपादित किया है – hohner

+0

धन्यवाद @ जैमी ... लेकिन अभी भी कोई भाग्य नहीं है। मेरे कोड में मैंने अपना कोड जोड़ा है। –

0

ठीक है, मैं टिप्पणी के रूप में छोड़कर पार्टी के लिए देर हो रही है, लेकिन सिर्फ भावी पीढ़ी के लिए:

$("#myform").on('change', input, (function(){ 
    alert('form element changed!'); 
    var $this = $(this); 
    var value = $this.val(); 
    var id = $this.attr("id"); 
    var name = $this.attr("name"); 
}); 

#myform अंदर इनपुट पर परिवर्तनों को सुनता: यहाँ असली ड्रीम्स 'दृष्टिकोण के अपने विस्तार है। मैंने jQuery-wrapped this को भी कैश किया। देखा!

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

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