2010-07-07 12 views
7

एचटीएमएल

<div contentEditable="true">testing....</div> 

jQuery

$(document).ready(function(){ 
    $('[contenteditable]').removeAttr('contenteditable'); 
}); 

कोड ऊपर ठीक है और काम कर रहा है की जाँच करें। आप इसे here महसूस कर सकते हैं।क्या यह एक बग है? कृपया इसे बाहर

अब, यह

$('[contentEditable]').removeAttr('contentEditable'); 
// notice the CamelCase of the string contentEditable 

एफएफ 3.6 में प्रयास करते हैं, यह सांत्वना

एक अमान्य या अवैध स्ट्रिंग था निर्दिष्ट पर एक त्रुटि देता है "कोड:" 12
ELEM [नाम] = मूल्य;

और div अभी भी संपादन योग्य है।

मुझे संदेह था कि यह jQuery चयनकर्ता था, लेकिन नहीं है। आगे निरीक्षण करके, .removeAttr('contentEditable'); पर यह तर्क पारित किया गया था। यह सभी छोटे अक्षरों के दौरान काम करता है। तो, मैंने सोचा कि यह सभी छोटे अक्षरों होना चाहिए। मैं उत्सुक हूं इसलिए मैंने CLass को एक विशेषता के रूप में जोड़ने का प्रयास किया और .removeAttr('CLass'); करें। लेकिन फिर यह त्रुटि के बिना काम करता है।

तो, contentEditable कैसे मुझे यह त्रुटि दे रहा है?


अद्यतन

कोबी से

, ऐसा लगता है कि यह वास्तव में छोड़कर, contentEditable (मैं भी कोशिश की थी) किसी भी मामले स्वीकार करते हैं।

CamelCase

+0

इस doctype एचटीएमएल 5 या XHTML है ? – airmanx86

उत्तर

2

इस बारे में छोटे अक्षरों नहीं है, लेकिन सटीक आवरण के बारे में। contentEditable से अधिक कोई अन्य आवरण, उदाहरण के लिए: removeAttr('ConTentEditable');
मुझे समस्या का सटीक स्रोत नहीं मिल रहा है, मुझे लगता है कि यह एक फ़ायरफ़ॉक्स प्रतिबंध है।

ऐसा लगता है कि इसे हटाने से पहले jQuery sets the attribute to an empty string लगता है, जो त्रुटि उत्पन्न कर रहा है। यह बेहतर काम करने के लिए लगता है:

$('[contentEditable]').attr('contentEditable', false); 
2

आप इसे एक बग कह सकते हैं, लेकिन वास्तव में ढांचा इस तरह से बनाया गया है। removeAttr, अन्य एटीआर फ़ंक्शंस के साथ, विशेषता के मान को सेट करने के लिए jQuery.attr() पर इंगित करता है। "" पर विशेषता सेट करने के बाद, यह इसे हटाने का प्रयास करता है। attr() के लिए कोड विशेष रूप से यदि दिए गए स्ट्रिंग वस्तु पहले in ऑपरेटर का उपयोग करने पर एक संपत्ति नाम है देखने के लिए जाँच करता है:

// If applicable, access the attribute via the DOM 0 way 
if (name in elem && notxml && !special) { 

(लाइन 1452-1453 jQuery 1.4 से,)

आप कर रहे हैं के बाद से ऊंटकेस संपत्ति का नाम प्रदान करना, यह elem.setAttribute() के बजाय उपयोग करता है, जो विशेष रूप से समस्या का कारण है।किसी भी अन्य मामले के लिए, name in elem झूठी वापसी करेगा (क्योंकि संपत्ति के नाम केस संवेदनशील हैं), यही कारण है कि यह सफल है। jQuery यह ज्यादातर setAttribute() के साथ क्रॉस ब्राउज़र समस्याओं के आसपास काम करने के लिए करता है।

ऐसा लगता है कि फ़ायरफ़ॉक्स को संपत्ति को खाली स्ट्रिंग में सेट करने में कोई समस्या है, जब तक कि आपको अन्य ब्राउज़रों में एक ही समस्या न हो। आप या तो jQuery साइट या एमडीसी पर एक बग को आज़माकर फ़ाइल कर सकते हैं।

+2

+1। पारंपरिक आईई बग की वजह से, jQuery के 'attr' फ़ंक्शंस एक HTML विशेषता ('contenteditable') और एक DOM प्रॉपर्टी (' contentEditable') के बीच अंतर को छिपाने का प्रयास करते हैं। भ्रमित परिणामों के साथ, सामान्य रूप से जब आप एक महत्वपूर्ण अंतर छिपाने की कोशिश करते हैं। – bobince

0

contentEditableसंपत्ति में से एक एक स्ट्रिंग मान उम्मीद, "सही" , "झूठा" और "वारिस"। मैं contentEditable बंद करने के लिए jQuery का प्रयोग करेंगे नहीं, लेकिन मैं निम्नलिखित काम करेगा कल्पना:

$('[contenteditable]').attr("contentEditable", "false"); 

या आप वास्तविक contentEditable संपत्ति की स्थापना के लिए jQuery बायपास कर सकता है:

$('[contenteditable]').each(function() { 
    this.contentEditable = "false"; 
}); 
संबंधित मुद्दे