2010-04-05 4 views
1

Je veux passer à un tableau d'ID de contrôles à une fonction de script javascript afin qu'il change l'état d'activation du contrôle.Comment passer un tableau anonyme de chaînes à une fonction JavaScript?

Par exemple, dans C# ce serait comme ceci:

func(false, new[] { "Control1", "Control2", "Control3" }); 

Dans cette fonction, je veux trouver des contrôles correspondants et désactiver/les activer. Pour un contrôle, procédez comme suit:

<script type="text/javascript" language="javascript"> 
    function switchControls(value, arr) { 
     for (var n = 0; n < array.length; n++) 
      document.getElementById([n]).disabled = value; 
    } 
</script> 

<asp:CheckBox runat="server" 
    onclick="switchControls(this.checked, 
     [ 
      '<%= Control1.ClientID %>', 
      '<%= Control2.ClientID %>' 
     ])" 
    Text="Take?" /> 

Comment l'implémenter correctement? Ai-je besoin d'utiliser jQuery?

+1

Un littéral de tableau dans JS est juste une liste séparée par des virgules '[en, carrés, crochets]'. Ce qui est bizarre, c'est que vous en avez déjà un exemple dans votre code de gestionnaire 'onclick', donc vous savez déjà comment le faire. Vous envoyez déjà deux identifiants de contrôle à la fonction dans un tableau, pas un. Alors, quelle est la question? –

+1

Cela ressemble à un bogue dans l'indexation de tableau à l'intérieur de switchControls. – ajm

+0

@ajm: Ça ne marche toujours pas. 'alert (arr.length)' ne montre rien – abatishchev

Répondre

0
<script type="text/javascript" language="javascript"> 
    function toggleControls(value) { 
     $('.toggle').each(function() { 
      if (value) { 
       $(this).removeAttr('disabled'); 

      } 
      else { 
       $(this).attr('disabled', 'true'); 
      } 
     }); 
    } 
</script> 

<asp:CheckBox runat="server" onclick="toggleControls(this.checked)" Text="Take?" /> 
<asp:TextBox runat="server" CssClass="toggle" /> 
2

vous ne "nantie" à utiliser jQuery, mais il est plus frais somekind de l'utiliser :)

function checkme(arr){ 
    if($.isArray(arr)){ 
    $.each(arr, function(){ 
     var currentState = this.attr('disabled'); 
     if(currentState == 'disabled' || currentState == 'true'){ 
      this.removeAttr('disabled');   
     } 
     else{ 
      this.attr('disabled', 'disabled'); 
     } 
    }); 
    } 
} 

utilisation: checkme([$("#someid"), $("#anotherid"), $("#anotherid")]);

+0

Votre code doit être modifié pour permettre une bascule pour activer/désactiver les contrôles. – CAbbott

+0

Comment combiner l'appel ASP.NET '' <%= code %> ''et l'appel jQuery' $ ("code") '? – abatishchev

3

Pas jQuery (ou toute autre bibliothèque) nécessaire.

Il ressemble à votre code fera l'affaire avec une modification ou deux:

<script type="text/javascript"> 
    function switchControls(value, arr) { 
     for (var n = 0; n < arr.length; n++){ 
      document.getElementById(arr[n]).disabled = value; 
     } 
    } 
</script> 

Tant que votre déclaration ASP passe dans un booléen et un tableau d'ID (il semble comme il le fait déjà, mais Je ne suis pas familier avec ASP), cela devrait fonctionner. Par exemple, votre onClick pourrait appeler switchControls comme ceci:

switchControls(true, ['foo','bar','baz']); 
+0

Ni 'switchControls (this.checked, [<% = txtMinimalCommission.ClientID%>])' ni 'switchControls (this.checked, [txtMinimalCommission.ClientID])' passent en tant que tableau. De ce n'est pas reconnu comme un tableau par la fonction JS – abatishchev

+0

clientID n'est pas une propriété valide JavaScript reconnaissait. Vous devriez avoir ASP rendre cela et ensuite le passer comme une chaîne dans votre tableau. Quelque chose comme 'switchControls (this.checked, [" <% = txtMinimalCommission.ClientID%> "])'. – ajm

Questions connexes