2009-07-04 10 views
54

नीचे दिए गए सरल कोड ब्लॉक को एक स्थिर HTML पृष्ठ में प्रदर्शित किया जा सकता है लेकिन परिणामस्वरूप जावास्क्रिप्ट त्रुटि हो सकती है। ऑनक्लिक हैंडलर (यानी \ "xyz) में एम्बेडेड डबल कोट से कैसे बचें? ध्यान दें कि HTML को डेटाबेस से डेटा खींचकर गतिशील रूप से जेनरेट किया गया है, जिसका डेटा अन्य HTML कोड के स्निपेट है जो या तो सिंगल या डबल हो सकता है उद्धरण। ऐसा लगता है कि एक भी बैकस्लैश दोहरे उद्धरण चरित्र के आगे जोड़ने चाल नहीं करता है।जावास्क्रिप्ट पर डबल कोट्स से बचने पर क्लिक करें ईवेंट हैंडलर

<script type="text/javascript"> 
    function parse(a, b, c) { 
     alert(c); 
    } 
</script> 

<a href="#x" onclick="parse('#', false, '<a href=\"xyz'); return false">Test</a> 

उत्तर

71

आप

&quot; या \x22

\" 

के बजाय

की कोशिश की?

+6

लिए मैं सिर्फ एक समान परिदृश्य के अंतर्गत FF3.6 और IE8 में यह परीक्षण किया है और यह काम नहीं किया। हालांकि "" के साथ" मैंने प्रतिस्थापित सटीक कोड का भी परीक्षण किया और यह दोनों तरीकों से काम किया। संक्षेप में \ x22 सभी परिदृश्यों के तहत काम नहीं करता है और आपको उस घटना में " का प्रयास करना चाहिए। – SpliFF

+3

नाइस। " काम करने लगता है वेबकिट और फ़ायरफ़ॉक्स और ओपेरा में एचटीएमएल टैग विशेषताओं में – NoBugs

+0

\ x22 केवल मेरे लिए काम किया गया है – Ruwantha

0

मुझे लगता है कि सबसे अच्छा तरीका onclick हैंडलर unobtrusively आवंटित करने के लिए है। इस तरह

कुछ :

window.onload = function(){ 
    var myLink = document.getElementsById('myLinkId'); 
    myLink.onclick = function(){ 
     parse('#', false, '<a href="xyz'); 
     return false; 
    } 
} 

//... 


<a href="#" id="myLink">Test</a> 
4

आप बचने वाले चरित्र से बचने के लिए दो बैकस्लैश (\\") को भी आजमा सकते हैं।

+1

क्लासिक। स्टैकओवरफ्लो ने आपके बैकस्लाश में से एक खा लिया और केवल दूसरा प्रदर्शित किया। मैंने इसे आपके लिए ठीक कर दिया है। – Nosredna

+1

ओह, धन्यवाद। आश्चर्य है कि ओपी के साथ क्या हुआ। –

5

जब मैं (jQuery या डोजो की तरह एक lib के माध्यम से) एक विनीत ढंग से ऐसा करने के बारे में सीएमएस से सहमत हैं, यहाँ क्या भी काम करते हैं:

<script type="text/javascript"> 
function parse(a, b, c) { 
    alert(c); 
    } 

</script> 

<a href="#x" onclick="parse('#', false, 'xyc&quot;foo');return false;">Test</a> 

कारण यह barfs नहीं जावास्क्रिप्ट की वजह से है, यह कारण है एचटीएमएल पार्सर का। इसमें अंत उद्धरण की तलाश के साथ भागने वाले उद्धरणों की कोई अवधारणा नहीं है और इसे पाता है और इसे ऑनक्लिक फ़ंक्शन के रूप में लौटाता है। यह अमान्य जावास्क्रिप्ट है, इसलिए जब तक कि जावास्क्रिप्ट फ़ंक्शन निष्पादित करने का प्रयास नहीं करता तब तक आपको त्रुटि के बारे में पता नहीं चलता ..

+2

डाउनवोट। आपको इस तरह के कुछ के लिए ढांचे की जरूरत नहीं है! –

+0

" के लिए +1 ... – Greg

50

इसे HTML-escaped होना चाहिए, जावास्क्रिप्ट से बच निकला नहीं। बदले \"&quot;

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