2012-03-27 11 views
6

पर event.target.id। मैं कुछ इसी तरह के सवाल जो सुझाव दिया है कि घटना कार्य करने के लिए एक पैरामीटर के रूप में पारित करने की आवश्यकता है मिल गया है:jQuery/जावास्क्रिप्ट मैं लिखा एक छोटी स्क्रिप्ट जो क्रोम पर ठीक काम करता है है फ़ायरफ़ॉक्स

function updateSentence(event){ 
    $(document).ready(function(event) { 
     t = event.target.id; 
     $("#S"+t).html($("#"+t).val()); 
    }); 
} 

फिर भी, मेरे लिए यह समाधान फ़ायरफ़ॉक्स समस्या हल नहीं होती है, और यह वास्तव में यह कैसे काम करता टूट जाता है क्रोम में क्रोम में, यह कहता है कि event.target परिभाषित नहीं किया गया है जब ये पारित किए जाते हैं।

मैं क्या गलत कर रहा हूं?

कुछ टिप्पणियां प्राप्त करने के बाद मुझे एहसास हुआ कि मैं सामान्य रूप से jQuery के बारे में क्या सोच रहा था गलत था। मैं $(document).ready वाक्य के हर अद्यतन पर नहीं चाहता था। इस ज्ञान के साथ मैं समाप्त हो गया साथ समारोह की सफाई:

function updateSentence(){ 
    t = event.target.id; 
    $("#S"+t).html($("#"+t).val()); 
} 

यह अभी भी सही ढंग क्रोम में सजा अपडेट हो जाता है, फिर भी target फ़ायरफ़ॉक्स में अपरिभाषित किया जा रहा है। फ़ायरफ़ॉक्स में काम करने के लिए मुझे क्या करने की आवश्यकता हो सकती है? और क्या मैं अभी भी jQuery में कुछ मौलिक रूप से गलत कर रहा हूं?

इसके अलावा, टिप्पणियों में एक प्रश्न का उत्तर देने के लिए, जिस घटना को मैं ढूंढ रहा हूं वह onchange ईवेंट है जो updateSentence() को ट्रिगर करता है। यह तब कहा जाना चाहिए जब कोई चयन/टेक्स्ट फ़ील्ड बदला जाता है।

(मैं अभी भी jQuery और सामान्य रूप में JavaScript के लिए नया हूँ, और मुझे यकीन है कि मैं बस एक साधारण गलती कर रहा हूँ कर रहा हूँ।)


मैं अपने जवाब मिल गया। जब मैं साइट को अनुमति देता हूं तो मैं कुछ घंटों में पोस्ट करूंगा।

+2

आप लक्ष्य को क्या उम्मीद करते हैं? '$ (दस्तावेज़) .ready' jQuery को स्वयं तर्क के रूप में भेजता है - लक्ष्य तत्व नहीं है। – pimvdb

+2

मुझे नहीं लगता कि (दस्तावेज़) चल रहा है। पहले से ही किसी अन्य फ़ंक्शन के अंदर एक अच्छा विचार है। यह पृष्ठ 'तैयार' पर, एक बार चलाने के लिए माना जाता है। अगर उस घटना के बाद बुलाया जाता है तो यह कार्य नहीं करेगा जैसा आप चाहते हैं। – lifeIsGood

+3

'फ़ायरफ़ॉक्स में हालांकि' का उपयोग करने से पता चलता है कि, किसी अन्य ब्राउज़र में, आपको कहीं से परिणाम मिल रहा है। आप वास्तव में नहीं होना चाहिए। उस स्क्रिप्ट के साथ नहीं। –

उत्तर

2

हाँ, बहुत अच्छा। यदि आप पुनर्विचार करते हैं कि आपने यह कैसे किया है तो यह अधिक समझ में आता है। अपने फ़ंक्शन से अपने बाध्यकारी को अलग करें और यह आपके द्वारा किए जा रहे कार्यों के साथ आधे युद्ध है।

$(function() { // Equivalent of Document Ready; You only need this once; 
    // BINDINGS HERE 
    $('someSelector').on('change keypress', function(event) { 
    updateSentence(this); 
    }); 
}); 

function updateSentence(elem) { 
    $('#S' + elem.id).html(elem.value) ; 
} 

और इसके अलावा, यह उन मामलों मैं भी एक माध्यमिक समारोह का उपयोग नहीं सुझाव है में से एक है।कुछ मामलों में, आप जो करना चाहते हैं वह इतना आसान है कि किसी भी कार्य को बाध्य करने के अलावा किसी अन्य कार्य को कॉल करने के लिए उचित ठहराना मुश्किल है।

$(function() { 
    $('someSelector').on('change keypress', function(event) { 
    $('#S' + this.id).html(this.value) ; 
    }); 
}); 

आप इन मामलों event के लिए की जरूरत नहीं रही है दोनों में देखेंगे। हालांकि, यह एफएफ के लिए भी उपलब्ध है, क्योंकि इसे एन तर्क (function(event)) के रूप में पारित किया जाएगा।

एफएफ के लिए आपके कोड में आपका 'लक्ष्य' अपरिभाषित कारण है क्योंकि एफएफ अधिकांश ब्राउज़रों की तरह हवा से event नहीं लेगा। इसलिए यदि आप event की आवश्यकता को खत्म करने के लिए अपना कोड सेट नहीं कर सकते हैं, या इसे मेरे उदाहरणों में पास कर सकते हैं, तो आप इसे window.event के माध्यम से देख सकते हैं।

1

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

मुझे यकीन है कि मैं अभी भी कुछ और इस व्याख्या में गलत कह रहा हूँ, लेकिन मैं जल्द ही सीखेंगे।

+0

नहीं, आपको वास्तव में यह देखने की प्रतीत नहीं होती कि घटना कैसे प्रसारित होती है। घटना बुलबुले, गुण है, और उनमें से एक लक्ष्य है। लक्ष्य में एक आईडी हो सकती है (यह सेट/एड्रेस करने योग्य नहीं हो सकता है)। लेकिन लक्ष्य कहां से मुद्दों से है। इस प्रकार, target.id वह जगह है जहां आपको तत्व की आईडी मिल सकती है। लेकिन आप अपने प्रश्न के साथ ठीक से नहीं हो रहे हैं (मेरा जवाब देखें कि कैसे: आप ईवेंट को संदर्भित करने की आवश्यकता को अनदेखा कर सकते हैं या बी: यदि आप वास्तव में ईवेंट के माध्यम से लक्ष्य के माध्यम से आईडी पर जाना चाहते हैं, तो पास करें इस तरह के एफएफ के माध्यम से घटना सीधे इसे देखती है या window.event के माध्यम से घटना का उपयोग करें – williambq

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

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