2014-01-21 20 views
1

我正在使用RegularExpressionValidator來驗證文本框。如何分配一個文本標籤在JavaScript中?

現在,如果文本框有效,我需要在標籤控件上顯示「頁面有效」消息。

我會在Code Behind中做它,還是我在javascript本身聲明標籤?

在javascript中我使用了曾嘗試:

document.getElementById("LabelId").innerText="Your Text Here" 

,但它顯示微軟JScript運行時錯誤

Unable to set value of the property 'innerText': object is null or undefined".

而且我一直在使用的innerHTML而不是嘗試過,但它顯示了類似的錯誤。那麼什麼是正確的方式來分配值標籤? 編輯:下面是我的aspx編碼:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true"   
CodeBehind="RegularExpressionValidator.aspx.cs" Inherits="ValidationTask.WebForm3" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
<asp:Label ID="LabelText" runat="server" Text="Label"></asp:Label><br /> 
<script type="text/javascript" language="javascript"> 
    function ValidatePage() { 
     debugger; 
     if (Page_IsValid) { 
      document.getElementById('<%= LabelText.ClientID %>').innerHTML = 'Page Is Valid'; 
     } 
     else { 
      document.getElementById('<%= LabelText.ClientID %>').innerHTML = 'Page is Invalid'; 
     } 
    } 
</script> 
<asp:Label ID="LabelZip" runat="server" Text="Enter Zip Code"></asp:Label> 
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br /> 
<asp:Button ID="Button1" runat="server" Text="Enter" OnClientClick="return ValidatePage()" /> 

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" ControlToValidate="TextBox1" 
ValidationExpression="\d{5}" runat="server" ErrorMessage="The zip code must be 5 numeric 
digits"></asp:RegularExpressionValidator> 
</asp:Content> 

在此先感謝。

P.S.我是新來的,這是我的第一個問題。如果我犯了錯誤,請忽略。

+0

嘗試在文檔加載或準備好時添加代碼。對象未定義或null在dom中未找到該元素時發生。請參考http://stackoverflow.com/questions/4488714/change-label-text-using-javascript –

+0

嘗試使用標籤的客戶端ID ....像'「<%= LabelId.clientID%>」'或使用檢查元素 –

+0

你可以檢查元素,並確保你有正確的ID? –

回答

2

客戶端ID的代

查看您的網頁在瀏覽器中源。這將爲您提供如何生成客戶端ID的良好指示。每個元素ID應該是唯一的,並且使用母版頁和控件時,您和.NET框架將很難生成這樣的結果。如果您使用帶有內容佔位符的母版頁,您會注意到您的元素標識符是根據它們所在的內容佔位符的名稱生成的。

關於生成客戶端ID,以下是一個很好的Code Project article

驗證

在你的情況下,使用時按下按鈕,如果導致頁面有效被回傳到服務器RegularExpressionValidator將觸發頁面驗證。在代碼隱藏中添加代碼可能是最好的。在這種情況下,像@SachinScriptManager.RegisterStartupScript應該在按鈕的事件處理程序中工作。

假設您只有一個字段:您可以將您的驗證器轉換爲CustomFieldValidator並通過javascript激發正則表達式。如果值是正確的,您可以在JavaScript中設置標籤文本,而不必進行任何回發,但是一旦頁面回傳,您可能會丟失標籤的狀態。

編輯: jQuery的

我常常參考使用jQuery selectors,因爲我不想與生成的客戶端ID費盡口舌我的元素。您可以使用Ends With Selector如下,讓您的元素:

var name = $('input[id$="txtName"]'); // Find an element that ends with "txtName". 

只記得衝突的可能,當你有一個生成的頁面在多個地方使用相同的名稱結尾的元素。

3
document.getElementById("LabelId").innerText="Your Text Here" 

這聽起來像你的元素沒有在網頁上找到。仔細檢查身份證以確保其存在。最簡單的方法是隻查看html以確保您使用的是正確的ID。將asp.Net標籤定義爲服務器端控件時需要注意的一點是,客戶端標識是指定標識和標籤祖先標識的串聯。這意味着您不能直接在JavaScript中引用服務器端ID,因爲它只是完整客戶端ID的一部分。您可能必須使用通配符來指定它。

如果您需要使用通配符可能更容易做到這一點jQuery的

$('[id*=LabelId]') 

這意味着你必須雖然添加腳本參考JQuery的。

+0

謝謝你快速回復先生。 「Microsoft JScript運行時錯誤:屬性'$'的值爲空或未定義,而不是函數對象」 – Khan

+0

他確實說過「這意味着您必須向JQuery添加腳本引用「這聽起來像你沒有做過 – sh1rts

+0

是的,對不起,我沒有指定你需要爲該解決方案添加Jquery。然而,我會確保該元素首先在該頁面上。如果你添加一個服務器端的asp.net標籤,客戶端id將是指定id和其祖先的id的串聯。先檢查一下 – TGH

1

在ASP.Net Web窗體中,服務器上的每個控件都有一個名爲ClientID的屬性。這是您可以在客戶端使用的生成的Id。因此,要在客戶端爲標籤設置標籤,其標籤爲< asp:label runat =「server」id =「label1」/ >,您可以採用的一種方式是使用服務器端獲取客戶端變量中的clientId RegisterStartupScript -

//server side code 
page_load(){ 
ScriptManager.RegisterStartupScript("IDs", string.format("var labelId = '{0}';", label1.ClientID); 
} 

//in javascript 
document.getElementById(labelId).innerHTML = 'whatever'; 

順便說一句,我只是看着這個代碼,所以它可能不會按原樣運行。

相關問題