2012-07-12 11 views
16

मैं सीएसएस के साथ onclick ईवेंट अक्षम करना चाहता हूं। मुमकिन?सीएसएस के साथ ऑनक्लिक अक्षम करें :: संभव है?

मान लीजिए कि मैं

<div id="btnCopy" class="button" onclick="btnCopy(this);"><img src="copy.png"></div> 

है और "अक्षम" वर्ग जोड़ने

document.getElementById("btnCopy").className += " disabled"; 

मैं इस तत्व के लिए onclick घटना बंद करने के लिए चाहते हैं के द्वारा करते हैं, तो onclick="btnCopy(this);" सक्रिय नहीं होगा।

और को हटाने "अक्षम" वर्ग

document.getElementById("btnCopy").className = 
    document.getElementById("btnCopy").className.replace(/(?:^|\s)disabled(?!\S)/, ''); 

इसे वापस सामान्य करने के लिए जाना होगा द्वारा, इसलिए onclick घटना सक्रिय हो जाएगा।

+0

सीएसएस तत्वों forstyling है, घटनाओं (सिवाय पर प्रतिक्रिया (या नहीं) के लिए नहीं: सामान मंडराना)। –

+0

आप एचटीएमएल 'अक्षम' विशेषता –

+0

'का उपयोग कर सकते हैं: होवर' किसी भी घटना को वैसे भी नहीं है। – BoltClock

उत्तर

9

पैरामीटर-तत्व में disabled कक्षा है या नहीं, यह जांचने के लिए अपने btnCopy फ़ंक्शन में कुछ जावास्क्रिप्ट जोड़ें।

जावास्क्रिप्ट के व्यवहार को बदलने के लिए सीएसएस का उपयोग करना संभव नहीं है। सीएसएस एचटीएमएल तत्वों को स्टाइल करने के लिए है, जावास्क्रिप्ट घटनाओं और साइट के व्यवहार को संभालने के लिए है। सीएसएस और जावास्क्रिप्ट दो बहुत ही अलग चीजें हैं। सीएसएस के साथ एकमात्र चीज संभव है कि उपयोगकर्ता को इनपुट पर क्लिक करने से रोकें (उदाहरण के लिए बटन)। सीएसएस समाधान के साथ, आप ऑनक्लिक घटना में कोड को अक्षम नहीं कर रहे हैं। आप केवल ऑनक्लिक ईवेंट को ट्रिगर करने की उपयोगकर्ता की क्षमता को अक्षम कर रहे हैं।

हालांकि, पृष्ठ पर सामान बदलने के लिए कई तरीके हैं (और भी जावास्क्रिप्ट या अपने ब्राउज़र के लिए कुछ प्लगइन के साथ), जिससे आपके सीएसएस छद्म-तत्व के बावजूद बटन पर क्लिक करना संभव हो सकता है। यही कारण है कि इस के लिए सीएसएस का उपयोग करने की अनुशंसा नहीं की जाती है।

+0

यही वह है जो मैं अब कर रहा हूं, लेकिन ... सीएसएस के साथ कुछ साफ होना अच्छा लगेगा .. –

+2

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

+0

@ Ωmega आप इसे सीएसएस के साथ क्यों करना चाहते हैं जब यह जावास्क्रिप्ट के साथ इस तरह की चीजों को संभालने के लिए है? क्या सीएसएस का उपयोग करने के लिए इसका उपयोग करना बेहतर नहीं है और इसका उपयोग करने के लिए जावास्क्रिप्ट का उपयोग करना बेहतर नहीं है? –

2

यदि आप क्लास जोड़ने और निकालने के लिए जावास्क्रिप्ट का उपयोग कर रहे हैं तो क्लिक ईवेंट को अक्षम करने के लिए इसका उपयोग क्यों न करें?

+0

क्योंकि एक बार जब मैं 'onclick =" "' सेट करता हूं, तो मुझे नहीं पता कि पहले क्या था ... मैं थोक में बटन सक्षम/अक्षम करना चाहता हूं ... –

+0

@ Ωmega बस जावास्क्रिप्ट में और ऑनक्लिक में एक ध्वज है जावास्क्रिप्ट में घटनाएं जांचें कि क्या चर सत्य/गलत है। अन्यथा बस सीएसएस अक्षम संपत्ति का उपयोग करें। –

5

यह hackish है, लेकिन मैं छद्म तत्वों का उपयोग कर सुझाव है:

एक विकलांग वर्ग के साथ एक बटन पर, आप एक छद्म तत्व बटन को कवर तो यह क्लिक करने योग्य नहीं है बना सकते हैं।

लेकिन यह जावास्क्रिप्ट के बाद से आप पहले से ही जोड़ सकते हैं और वर्गों को दूर करने का उपयोग कर रहे उपयोग करने के लिए और अधिक समझ बनाने के हूँ ...

संपादित करें: बिल्कुल नहीं सुझाया गया, लेकिन यहाँ तुम जाओ:

#btnCopy {position:relative;z-index:1;} 

.disabled:before { 
    content:" "; 
    display:block; 
    position:absolute; 
    top:0;left:0;right:0;bottom:0; 
    z-index:10; 
} 
+0

मेरा जवाब संपादित किया गया, यह काम करना चाहिए; – Krimo

+1

यह छद्म-तत्व जोड़ने के लिए बहुत अधिक समझ में नहीं आता है, जहां आप इसे करने के लिए जावास्क्रिप्ट का उपयोग कर सकते हैं (यह * उद्देश्य * को संभालने के लिए इसका उद्देश्य है) – Krimo

+0

@ Ωmega यह बिल्कुल समर्थित नहीं है, यह सिर्फ सीएसएस द्वारा समर्थित चीजों से एक दुष्प्रभाव। मैंने जावास्क्रिप्ट बनाम सीएसएस समाधान के बारे में थोड़ा और विवरण के साथ अपना जवाब अपडेट किया है। –

0

यदि आप कक्षा "अक्षम" को जोड़ना या निकालना चाहते हैं तो आप अपने ईवेंट हैंडलर में इस कक्षा के लिए भी जांच कर सकते हैं, और कुछ भी करने से तत्व को कक्षा अक्षम कर दी गई है।

+0

यही वह है जो मैं अब कर रहा हूं ... –

-2
<div id="btnCopy" class="button" 
    onClick="if(this.className.indexOf('disabled') == -1){btnCopy(this);}"> 
    <img src="copy.png"> 
</div> 

इसे जावास्क्रिप्ट के साथ किया जाना होगा। एक if(indexOf('disabled') == -1) चाल करना चाहिए।

+1

बस जोड़ना चाहते हैं, यह सुंदर नहीं है। इवेंट हैंडलर के अंदर ऐसा करना बेहतर होगा या बीच में एक फ़ंक्शन चेक करें। – Dpolehonski

+3

इसके अलावा, क्लासनाम पर एक इंडेक्स का उपयोग करने से कक्षा "notdisabled" से मेल खाती है, अगर यह तत्व पर मौजूद होगी। –

-3

सीएसएस के माध्यम से इसे पूरी तरह से करने का एक तरीका होवर पर एक अनजान अदृश्य ओवरले प्रदर्शित कर रहा है।

डेमो: http://jsfiddle.net/FNVmh/1/

+0

इस दृष्टिकोण के साथ कुछ भी गलत है? इसका उद्देश्य केवल सीएसएस छद्म-घटनाओं के उद्देश्य के लिए उपयोग करता है .. कोई जेएस भी .. – techfoobar

+0

धन्यवाद, लेकिन मैं अधिक कारणों से अंदर 'इनपुट' तत्वों का उपयोग नहीं करना चाहता, उनमें से एक फोकस है ... –

+1

ठीक है। लेकिन इनपुट अक्षम है, इसलिए यह कभी फोकस नहीं करेगा। कोई अन्य कारण? (जिज्ञासा से, ताकि मैं कुछ नया सीख सकूं .. :) – techfoobar

16

कुछ ब्राउज़रों आप pointer-events: none सेट कर सकते हैं में, लेकिन यह है कि सभी माउस घटनाओं न सिर्फ क्लिक करता अक्षम करता है। देखें: https://developer.mozilla.org/en/CSS/pointer-events/

+1

+1 :: अच्छा साफ समाधान, लेकिन (अभी के लिए) समर्थन की कमी। –

0

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

var btnCopy = document.getElementById("btnCopy"); 
btnCopy.className += " disabled"; 
btnCopy.onclick = null; 

सबसे अच्छा विकल्प jQuery का उपयोग और देखें कि क्या btnCopy 'अक्षम' वर्ग है करने के लिए शायद है।

if(!$('btnCopy').hasClass('disabled')){ 
    //Add code to copy text here 
} 

शुभकामनाएँ!

+1

आप 'element.onclick = null; 'मूल पर वापस कैसे जाएंगे, जब' अक्षम 'हटा दिया जाएगा? अधिक तत्वों के लिए, मुझे थोक में अक्षम वर्ग को चालू/बंद करना होगा। मैं अलग-अलग पंक्ति में प्रत्येक तत्व के लिए 'ऑनक्लिक' सेट नहीं करना चाहता हूं ... –

13

आप यह कर सकते हैं।

pointer-events: none; 
cursor: default; 

अधिक here

+5

कर्सर को अनदेखा किया जाता है जब 'पॉइंटर-इवेंट' को 'none' पर सेट किया जाता है –

1

यह कैसे बूटस्ट्रैप यह करना है।

.btn.disabled, .btn[disabled] { 
    cursor: not-allowed; 
    opacity: 0.65; 
    filter: alpha(opacity=65); 
    box-shadow: none; 
} 

तुम बस cursor: not-allowed; रख सकते हैं और अगर आप शैलियों की रीसेट की जरूरत नहीं है तो आप उन्हें हटाने opacity: 0.65; filter: alpha(opacity=65); box-shadow: none;

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