2011-01-04 23 views
15

द्वारा उत्पन्न नियंत्रण नहीं ढूंढ रहा है, मैं बस जावास्क्रिप्ट में एक चर में एक लेबल को स्टोर करने की कोशिश कर रहा हूं लेकिन किसी कारण से यह document.getElementById('control'); के साथ काम नहीं कर रहा है। मुझे पता है कि मेरी जावास्क्रिप्ट मेरी एचटीएमएल फाइल को जुड़ा हुआ है क्योंकि बाकी सब कुछ काम करता है।getElementById ASP.net

यहाँ मेरी जावास्क्रिप्ट कोड है:

function performEvapCooledCircuit(txt) 
{ 
    var error = document.getElementById('lblError'); 


    if (txt.value == null || isNaN(txt.value)) 
    { 
     error.style.visibility = "visible"; 
    } 
} 

यहाँ मेरी लेबल के लिए एचटीएमएल कोड है:

<asp:Label ID="lblError" class="NormLabel" runat="server" 
    style="color:red; visibility:hidden;" Text="Invalid Input."></asp:Label> 

मैं एक त्रुटि है कि वस्तु की उम्मीद कहते हो रही है ??

उत्तर

20

आईडी कि ASP.NET उत्पन्न होगा तो आप के द्वारा अपने ClientID

document.getElementById('<%=lblError.ClientID %>'); 

यदि आपका जावास्क्रिप्ट फ़ाइल बाहरी है मैं आमतौर पर लिया है इसे संदर्भ की आवश्यकता होगी नहीं होगा "lblError" "Init" जावास्क्रिप्ट विधि यकीन है कि मेरे आईडी बनाने के लिए एक प्रकार का लिखने के लिए संपत्ति

स्थापित किए गए अपने ASPX पेज पर:

<script type="text/javascript"> 
    var lblError = null; 
    function InitializeVariables() 
    { 
     if (lblError == null) // make sure you only do this once 
     { 
      lblError = document.getElementById("<%=lblError.ClientID %>"); 
     } 
    } 
</script> 
<asp:Label 
    ID="lblError" 
    class="NormLabel" 
    runat="server" 
    style="color:red; visibility:hidden;" 
    Text="Invalid Input."></asp:Label> 

फिर अपने जावास्क्रिप्ट फ़ाइल में आप आप चर उचित asp.net की ओर इशारा करते मिल गया है सुनिश्चित करने के लिए InitializeVariables() फोन करना होगा नियंत्रित करता

function performEvapCooledCircuit(txt) 
{ 
    InitializeVariables(); 

    if (txt.value == null || isNaN(txt.value)) 
    { 
     lblError.style.visibility = "visible"; 
    } 
} 
+0

जावा स्क्रिप्ट कोड में एम्बेडेड नहीं है:

<asp:Label ID="lblError" runat="server" ClientIDMode="Static" /> 

कुछ इस तरह के रूप में प्रदान की जाएगी एएसपीनेट फ़ाइल। –

+0

आप कैसे जानते हैं? – hunter

+0

शिम विदा स्पष्टीकरण के साथ, यह उत्तर सहायक हो सकता है। –

2

लेबल की आईडी "lblError" नहीं है। एएसपीनेट इंजन ने आईडी बदल दी। असली आईडी खोजने के लिए ब्राउज़र में HTML स्रोत कोड देखें।

+0

@ imeimeidas: मैं आईडी मान को हार्ड-कोडिंग की अनुशंसा नहीं करता क्योंकि यह कंटेनर स्थान के आधार पर बदल सकता है। एक पृष्ठ को मामूली स्थिर होने के कारण यह ठीक होगा, लेकिन किसी भी भावी परिवर्धन/रीडिज़ाइन में, यह एक मुद्दा हो सकता है। –

+0

@ ब्रैड हां, हार्ड कोडिंग एक बुरा विचार होगा। मैं एएसपीनेट नहीं करता लेकिन मुझे यह समस्या याद है, और मैंने एक फीचर के बारे में पढ़ा है जो आपको क्लाइंट आईडी को सीधे परिभाषित करने देगा। यह इस समस्या का समाधान होगा। –

1

यह लेबल के लिए HTML नहीं है, यह एक एएसपी.NET नियंत्रण है जिसे प्रतिक्रिया में भेजने से पहले HTML में प्रस्तुत किया जाएगा। एएसपी.नेट वेबफॉर्म नियंत्रण कभी-कभी एचटीएमएल के निर्माण के लिए आईडी को बदलता है।

वेबपृष्ठ का स्रोत देखें यह देखने के लिए कि HTML तत्व के लिए आईडी प्रस्तुत पृष्ठ पर क्या है।

6

"शिकारी" चीजों को करने का एक ठोस ठोस तरीका देता है, हालांकि, मेरी राय में नियंत्रण पर "क्लीएंडिडोड" संपत्ति का उपयोग करने के लिए कहीं बेहतर तरीका है और उस संपत्ति को "स्टेटिक" पर सेट करना है। इससे ग्राहक और सर्वर आईडी समान हो जाएंगी। इस तरह:

<asp:TextBox ID="ServerAndClientId" runat="server" ClientIDMode="Static" /> 
+1

वाह धन्यवाद। लेकिन [यह] (http://stackoverflow.com/questions/6057490/is-there-any-drawback-to-set-clientidmode-static-on-every-object-set-on-main) पोस्ट कहता है कि कुछ है इसका उपयोग करने में कमी। – Arman

+1

हां, नियंत्रण के प्रकार के आधार पर यह हमेशा आदर्श नहीं होता है। कुल मिलाकर मैं अभी भी इसे पसंद करता हूं। विशेष रूप से यदि आपके पास बाहरी फाइलों में एक अच्छी लड़का या लड़की की तरह आपकी सभी जावास्क्रिप्ट है। – Maverick

1

आप इस का उपयोग कर सकते हैं:

document.getElementById('<%= lblError.ClientID %>').click() 

ASP.NET 4.0 से शुरू आप आप तत्व के लिए ClientIDMode संपत्ति का उपयोग कर सकते हैं। और तुम Static में यह सेट करता है, तो उसके बाद ClientID मूल्य आईडी संपत्ति के मूल्य पर सेट हो जाएगा:

<span id="lblError" name="ctl00$MasterPageBody$ctl00$Label1" /> 
संबंधित मुद्दे