2010-04-06 4 views
1

J'ai essayé javascript, mais cela ne fonctionne pas - herepropriété de bouton Modifier activé via case

Je dois changer la propriété enabled du bouton true lorsque la case est cochée et false quand il est pas. C'est mon code.

<tr> 
    <td colspan="2" align="center"> 
    <asp:CheckBox ID="cbAcceptAgreement" runat="server" OnClientClick="acceptAgreement(this)" /> 
    <asp:Label ID="lblUserAgreement" runat="server" Text="I accept the " /> 
    <asp:HyperLink ID="hlUserAgreement" runat="server" Text="User Agreement" NavigateUrl="Help/UserAgreement.aspx" /> 
    </td> 
</tr> 
<tr> 
    <td colspan="2" align="center"> 
    <asp:Button ID="btnRegister" runat="server" Text="Register" /> 
    </td> 
</tr> 

<script type="text/javascript"> 
    function acceptAgreement(obj) { 
    document.getElementById('<%=btnRegister.ClientID%>').disabled = !obj.checked; 
    } 
</script> 

Pouvez-vous m'aider à résoudre ce problème?

Répondre

2

Javascript est sensible à la casse, vous avez Obj et obj dans votre fonction, ils doivent correspondre :)

Pour fixer, changer votre fonction à ceci:

function acceptAgreement(obj) { 
    document.getElementById('<%=btnRegister.ClientID%>').disabled = !obj.checked; 
} 
+0

Ne fonctionne toujours pas :( –

+0

@Ivan - Ce qui ne fonctionne pas, ce n'est pas basculer, il n'est pas désactivé au départ, erreur javascript ... autre? –

+0

le bouton est activé tout le temps –

0
function acceptAgreement(id){ // where id is check box id 
    var check = document.getElementById(id).checked 
    document.getElementById('btnRegister').disabled = !check 
} 
+0

où '" master "' est 'id', hey? –

+0

@david. C'est par erreur que je l'édite. – Salil

0

depuis que vous avez ces les boutons et la case à cocher fonctionnant au serveur pourquoi ne vous manipulez pas l'activation et la désactivation avec le code de serveur derrière. Aussi langage de programmation utilisez-vous pour le codebehind C# exemple

  protected void cbAcceptAgreement_CheckChanged(object sender, EventArgs e) 
     { 
      btnRegister.Enabled = cbAcceptAgreement.Checked; 
     } 

page partie

 <asp:CheckBox ID="cbAcceptAgreement" runat="server" AutoPostBack="True" 
     oncheckedchanged="cbAcceptAgreement_CheckedChanged" /> 

Lemme savoir si cela a fonctionné pour vous Ivan

changé autopostback = true pour le chekcbox, espérons que aidera

+2

c'est une idée terrible. faire cela clientide donnera beaucoup de meilleures performances, une meilleure expérience utilisateur, et avec beaucoup moins de code (frapper le serveur pour cela nécessiterait une implémentation ajax/updatepanel) –

+0

J'utilise C#. J'ai cherché un code derrière la solution, mais je ne pouvais pas en trouver un. –

+0

ok c'est un simple registre il ne s'use pas terriblement souvent et je ne sais pas pourquoi vous auriez à le faire côté client. Cela peut être le cas seulement dans quelques exemples tels que la navigation web mobile où vous ne voudriez pas attendre le serveur mais je pense que dans le cadre de cette question côté client serait bien. Sinon pourquoi avoir même un côté client –