2010-03-05 7 views
0

J'ai une zone de texte multiligne qui, par défaut, est définie sur ReadOnly. Je voudrais un bouton sur la page pour changer le contrôle pour lui permettre d'être édité. Je voudrais que ce code s'exécute du côté client car la page est rendue lentement et j'aimerais éviter la publication.Suppression de l'attribut READONLY de la zone de texte à l'aide du code côté client

Le problème que j'ai est le code javascript que j'ai écrit pour supprimer l'attribut readonly semble n'avoir aucun effet. J'ai posté un exemple dépouillé qui illustre le problème pour votre avis.

<%@ Page Language="C#" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<script runat="server"> 

</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Test</title> 
    <script type="text/javascript" language="javascript"> 
    function EnableEditing() { 
    var e = document.getElementById("<%=TextBox1.ClientID%>"); 
     var result = e.removeAttribute("readonly"); 
     alert(result); 

    } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div>  </div> 
<asp:TextBox ID="TextBox1" runat="server" ReadOnly="True" TextMode="MultiLine">test</asp:TextBox>   
     <input id="Button1" onclick="EnableEditing()" type="button" value="Remove RO" /> 

    </form> 
</body> 
</html> 

Répondre

3

TextBox1 est l'ID côté serveur,

essayer

var e = document.getElementById("<%=TextBox1.ClientID%>"); 

var result = e.removeAttribute("readonly",0); 

ou si vous ne voulez pas la recherche CASEINSENSITIVE

var result = e.removeAttribute("readOnly");//note upercase Only 
+0

En cochant la source, la zone de texte a un ID de TextBox1. Cependant, je vous ai fait changer de toute façon pour des raisons de précision. Cela n'a fait aucune différence. Vous ne pouvez toujours pas modifier la zone de texte. – Aheho

+0

@Aheho passer le deuxième param dans 0 (je ai ammended mon code) pour lui dire de faire une recherche insensible à la casse, vous devez utiliser le ClientId aussi, il vous assure obtenir le bon ID qui ne sera pas toujours le même, surtout si le les contrôles sont imbriqués dans d'autres contrôles – Pharabus

+0

Cela fonctionne. Merci! – Aheho

1

Utilisez var e = document.getElementById("<%=TextBox1.ClientID%>");

Al Par conséquent, si vous souhaitez lire le texte modifié en publication, vous ne pouvez pas définir l'attribut readonly sur le contrôle serveur. Vous devez le définir sur le client uniquement, comme dans: TextBox1.Attributes("readOnly") = "readOnly";

+0

Merci pour la clarification. Je me suis rendu compte que lorsque les changements de zone de texte n'étaient pas là sur la publication. – Aheho

Questions connexes