2013-02-26 22 views
32

साथ विशेषता यह मेरा समारोह है और यह HTML इनपुट की onclick विशेषता बदलना चाहिए, लेकिन यह सब पर काम नहीं करता है अगर मैंonClick बदलें जावास्क्रिप्ट

document.getElementById('buttonLED'+id).onclick = "writeLED(1,1)"; 

उपयोग करते हैं, लेकिन अगर मैं

document.getElementById('buttonLED'+id).onclick = writeLED(1,1); 
का उपयोग

फ़ंक्शन स्वयं निष्पादित करता है! बटन पर क्लिक करने से पहले, फ़ंक्शन निष्पादित किए बिना ऑनकलिक विशेषता को बदलने के लिए मुझे किस कोड का उपयोग करना है?
यहाँ, पूर्ण कार्य है अगर यह मायने रखती है:

function showLED(id){ 
    if(color == 0){ 
     document.getElementById('buttonLED'+id).onclick = "writeLED(1,1)"; 
     document.getElementById('buttonLED'+id).value="light is on"; 
     //document.getElementById('buttonLED'+id).disabled = false; 
    }else{ 
     document.getElementById('buttonLED'+id).onclick = "writeLED(1,0)"; 
     document.getElementById('buttonLED'+id).value="light is off"; 
     //document.getElementById('buttonLED'+id).disabled = false; 
    } 
} 
+3

'document.getElementById ('buttonLED' + आईडी) .onclick =" writeLED (1,1) ",' है तत्व की 'ऑनक्लिक' प्रॉपर्टी को स्ट्रिंग में सेट करना। – crush

+2

'document.getElementById ('बटनLED' + id) .onclick = writeLED (1,1);' 'LELELED (1,1)' – crush

+0

के परिणामस्वरूप तत्व की 'ऑनक्लिक' प्रॉपर्टी सेट कर रहा है [ जावास्क्रिप्ट फ़ंक्शन के साथ ऑनक्लिक कार्रवाई बदलें] (http: // stackoverflow।कॉम/प्रश्न/5303899/चेंज-ऑनक्लिक-एक्शन-ए-जावास्क्रिप्ट-फ़ंक्शन) – Vadzim

उत्तर

43

आप ऐसा करना चाहते हैं - एक समारोह है कि onclick घटना पर प्रतिक्रिया के लिए क्रियान्वित की जाएगी सेट:

document.getElementById('buttonLED'+id).onclick = function(){ writeLED(1,1); } ; 

चीजें आप कर रहे हैं कर रही है क्योंकि काम नहीं करते:

  1. ऑनक्लिक ईवेंट हैंडलर के एक समारोह की अपेक्षा करता है, यहाँ आप एक स्ट्रिंग

    बताए जाते हैं
    document.getElementById('buttonLED'+id).onclick = "writeLED(1,1)"; 
    
  2. इस में, आप ऑनक्लिक ईवेंट हैंडलर के रूप में बताए जाते हैं writeLED (1,1) फ़ंक्शन को निष्पादित करने का परिणाम:

    document.getElementById('buttonLED'+id).onclick = writeLED(1,1); 
    
+2

+1 "जब आपको कोई समस्या हो - अबास्ट्रक्शन की एक और परत जोड़ें" - क्लासिक :) – alfasin

+0

बहुत अच्छा काम करता है, मैंने बस इसे अंदर रखा है और सही काम कर रहा है, धन्यवाद! – shiro

+2

ओह मुझे इससे नफरत है। यदि आप बटनLED तत्व का निरीक्षण करते हैं, तो आप देखेंगे कि ऑनक्लिक विशेषता सेट नहीं की जा रही है, यह एक क्षणिक ईवेंट हैंडलर बना रहा है जिसे आप स्रोत में नहीं देख पाएंगे। मार्सेलो टेक्सीरा रग्गेरी का उत्तर वास्तव में ऑनक्लिक विशेषता सेट करता है, जो मूल प्रश्न पूछा गया है। मैं इस जवाब को कम नहीं करूँगा क्योंकि यह काम करता है और स्वीकार किया गया था, लेकिन मेरे लिए, यह निश्चित रूप से बदबू आ रही है। –

0

आप वास्तव में समारोह बदल रहे हैं।

onClick किसी फ़ंक्शन को सौंपा गया है (जो किसी मामले का संदर्भ है, इस मामले में फ़ंक्शन पॉइंटर)। इससे गुजरने वाले मान कोई फर्क नहीं पड़ता और किसी भी तरीके से उपयोग नहीं किया जा सकता है।

आपकी समस्या color कहीं भी नहीं है।

आदर्श रूप से, फ़ंक्शन के अंदर आपको यह तर्क रखना चाहिए और इसे लिखना चाहिए कि क्या लिखना है। (/ बंद आदि आदि)

52

ठीक है, बस यह करने के लिए और अपनी समस्या को हल किया जाता है:

document.getElementById('buttonLED'+id).setAttribute('onclick','writeLED(1,1)') 

एक अच्छा दिन एक्सडी है

+1

thnx बहुत कुछ। यह वही व्यवहार है जो मैं चाहता था। – Rusty

+1

यह कुछ काम करने के लिए सिर्फ एक कड़वाहट की बजाय वास्तविक प्रश्न का उत्तर जैसा लगता है। –

3

लाइन onclick = writeLED(1,1) मतलब है कि आप करना चाहते हैं तुरंत निष्पादित फंक्शन लिखने (डी 1, arg2, arg2) तर्क 1, 1 के साथ और वापसी मूल्य असाइन करें; आपको इसके बजाय एक फ़ंक्शन बनाना होगा जो उन तर्कों के साथ निष्पादित करेगा और उसे असाइन करेगा। सर्वोच्च जवाब एक उदाहरण दिया - एक और तो जैसे बाँध() फ़ंक्शन का उपयोग करने के लिए है:

var writeLEDWithSpecifiedArguments = writeLED.bind(this, 1,1); 
    document.getElementById('buttonLED'+id).onclick = writeLEDWithSpecifiedArguments; 
संबंधित मुद्दे