Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Javascript set button enable on checkbox true
Message
De
15/10/2010 12:46:07
Timothy Bryan
Sharpline Consultants
Conroe, Texas, États-Unis
 
 
À
15/10/2010 12:36:34
Information générale
Forum:
ASP.NET
Catégorie:
Autre
Versions des environnements
Environment:
C# 4.0
Application:
Web
Divers
Thread ID:
01485567
Message ID:
01485613
Vues:
30
>>>
>>>Sorry, I'd forgotten about that behaviour. I guess, if the checkbox and button are at the same level then this would work in the function:
var s = checkbox.id.substr(0, checkbox.id.lastIndexOf("_") + 1) + "btnAgreeContinue"; ;
>>>var button = document.getElementById(s);
>>>button.disabled = !checkbox.checked;
but there must be something a bit more elegant.....
>>
>>
>>This didn't work either.
>
>Worked for me with a usercontrol in a form but it does depend on both elements being at the same level. Given that, I don't know why it didn't work for you. But it is ugly anyway.....

My two controls are at the same level.

>
>> I tried my other code to FindControl and pass that in such as this so I could see what the button id was and surprising it is 'btnContinue".
>
>So, given that the compiler didn't dream that up from scratch where did the name stem from ?
>
>> So very frustrating to get such a simple thing to work. These things make me want to stick to WPF or Silverlight and avoid ASP.net.
>
>Very true. Would just have been a simple binding in WPF/Silverlight....
>
>>
>>mmButton thisButton = (mmButton)this.FindControlByName(this, "btnAgreeContinue");
>>
>>StringBuilder sb = new StringBuilder();
>>sb.Append(@"<script language='javascript' type='text/javascript'>");
>>sb.Append(@"function SetAgreeAndContinue(checkbox) {");
>>sb.Append(@"var button = document.getElementById('" + thisButton.ID + "');");
>>sb.Append(@"button.disabled = !checkbox.checked;");
>>sb.Append(@"}");
>>sb.Append(@"</script>");
>>
>>string myscript = sb.ToString();
>>Page.RegisterStartupScript("S", myscript);
>>
>
>So what does FindControlByName() look like ?

That was a method someone posted for me here in VB.net and I converted. It works pretty well and does return this control just fine. Here it is again.
public Control FindControlByName<T>(T controlToSearch, string controlID)
			where T : System.Web.UI.Control
{
     Control matchingControl = null;

    try
    {
        foreach (Control subControl in controlToSearch.Controls)
        {
            if (subControl.ID != null && subControl.ID.EndsWith(controlID))
            {
	matchingControl = subControl;
	break;
            }
            else
            {	
	if (matchingControl != null)
	    // found it
	    break;
                     else if (subControl.HasControls())
                    {
	    matchingControl = this.FindControlByName(subControl, controlID);
                    }
            }
        }
    }
    catch (Exception e)
    {
        throw;
     }
    return matchingControl;
}
Tim
Timothy Bryan
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform