2010-01-27 3 views
-1

Pouvez-vous aider à transformer le Javascript suivant en équivalent jQuery?Transformez ce javascript en équivalent jQuery

// Let's use a lowercase function name to keep with JavaScript conventions 
function selectAll(involker) { 
    // Since ASP.NET checkboxes are really HTML input elements 
    // let's get all the inputs 
    var inputElements = document.getElementsByTagName('input'); 

    for (var i = 0; i < inputElements.length; i++) { 
     var myElement = inputElements[i]; 

     // Filter through the input types looking for checkboxes 
     if (myElement.type === "checkbox") { 

      // Use the involker (our calling element) as the reference 
      // for our checkbox status 
      myElement.checked = involker.checked; 
     } 
    } 
} 

Il est d'ici http://wiki.asp.net/page.aspx/281/check-uncheck-checkboxes-in-gridview-using-javascript/

+4

Pourriez-vous faire le tour et peindre ma maison pour moi? – Lazarus

Répondre

5
function selectAll(involker) { 
    $('input:checkbox').attr('checked', $(involker).attr('checked')); 
} 
+1

sûrement il vaudrait mieux passer l'attribut 'checked' en tant que var au lieu de faire un test dessus plusieurs fois? (bien que pour autant que je sache, cela peut être simplifié par l'interprète) –

+0

Dans le code ci-dessus, il est seulement testé une fois. $ (.,.). attr boucle sur les résultats de la requête. –

+0

Je suis un débutant jQuery. Cela m'aide beaucoup. Je vous remercie. – narazana

2

Juste par:

function selectAll(involker) { 
    $('input:checkbox').attr('checked', involker.checked); 
} 
1
$('input:checkbox').attr('checked', involker.checked); 

Il est également "invocateur" non "involker".

+0

c'est involker dans l'asp.net (=) –

+0

bien oui, mes yeux ne sont pas si mauvais, et vous remarquerez que je l'ai épelé de cette façon dans le code. – Pointy

+0

je voulais juste dire que vous ne devriez pas dire à narazana cela, mais adam kahtava à asp.net si quelqu'un =) –

2

Faisons le style jquery!

$('type here the selector for invoker').click(function(){ 
    $('input:checkbox').attr('checked', $(this).attr('checked')); 
}); 
0

En supposant le même code HTML que l'exemple, vous voulez supprimer les attributs d'événement (c.-à-OnClick="selectAll(this)") et utiliser Javascript discret:

$(document).ready(function() { 
    $('#cbSelectAll').click(function() { 
     $('input:checkbox').attr('checked', $(this).attr('checked')); 
    }); 
}); 
+0

alors que je suis d'accord que vous voulez supprimer les attributs d'événement, l'exemple de naugtur est comment définir correctement la valeur dans ce cas. –

+0

Pourquoi le PO veut-il nécessairement faire cela? Peut-être qu'il/elle voudra que la fonction soit appelée même si la case à cocher est cliquée avant que le chargement du document soit terminé. –

+0

@David: Oui vous avez raison, ma solution originale n'a pas activé la case à cocher. @Tim: J'ai ajouté le code standard 'document.ready' de jQuery, qui résout ce problème. – DisgruntledGoat

1

Ma réponse sera semblable aux autres, sauf pour souligner que l'utilisation attr() est un très mauvais moyen d'obtenir ou de définir la vérification d'une case à cocher. Il est plus long, plus difficile à lire, plus lent et plus sujet aux erreurs, car il passe par toutes sortes d'appels inutiles à la fonction jQuery et implique faussement qu'il a quelque chose à voir avec les attributs.

function selectAll(invoker) { 
    var check = invoker.checked; 
    $('input:checkbox').each(function() { this.checked = check; }); 
} 
+0

Je vais vous donner qu'accéder à l'état vérifié du nœud DOM dans JS simple sera le moyen le plus rapide d'y parvenir, mais ce n'est certainement pas le jQueryest. Il me semble que l'OP voulait juste apprendre quelque chose, et je dirais que vous ne l'apprenez pas par de simples exemples de JS. Si c'est juste la vitesse que vous recherchez, ce sera toujours plus lent que la fonction fournie dans la question. et je ne serais pas d'accord pour dire que l'itération manuelle de l'ensemble avec 'each' est plus lisible que l'utilisation des fonctions basées sur les ensembles de jQuery. La possibilité de définir des propriétés sur un ensemble complet d'éléments pourrait être la caractéristique la plus forte de jQuery –

+0

Je suis partiellement d'accord. Premièrement, si jQueryness signifie ne pas apprendre * toutes * les techniques DOM simples, même si elles sont plus simples que l'équivalent jQuery, alors je ne peux pas le recommander. Je suggère que tout faire servilement dans un style jQuery parce que, diable, il est là et je vais bien l'utiliser, n'est pas une bonne façon d'y aller. Utilisez-le pour ce qu'il est bon, à savoir la sélection et l'itération sur des collections de nœuds dans le DOM. Une fois que vous écrivez le bit qui manipule un noeud DOM, il y a de bonnes chances qu'il y ait une méthode ou une propriété DOM facile qui fasse ce dont vous avez besoin et je pense qu'il est préférable de l'utiliser. [suite] –

+0

En ce qui concerne ma réponse, c'est une honte que j'ai été obligé d'utiliser 'each' pour parcourir les noeuds sélectionnés parce que cela nuit à la lisibilité, et je concède entièrement que ma réponse sera plus lente que la fonction OP: elle est inévitable depuis il utilise jQuery. Cependant, je suis fortement en désaccord avec l'utilisation de jQuery pour les opérations DOM triviales, en particulier les idées fausses laineuses que la méthode 'attr() semble engendrer dans les esprits, et a donné un exemple de la façon dont la tâche originale pouvait être réalisée (à mon avis) en utilisant jQuery. –

0

Juste pour donner une variété d'options et ajouter des informations pour les autres.

Pour répondre remplacement de votre fonction: Définissez toutes les cases pour correspondre à l'état vérifié actuel de involker:

function selectAll(involker) 
{ 
    $("input:checkbox").attr("checked",involker.checked); 
}; 

AUTRES:

Définissez toutes les cases contrôlées actuellement en fonction de l'état vérifié en cours de involker:

function selectAll(involker) 
{ 
    $("input:checkbox:checked").attr("checked",involker.checked); 
}; 

Définissez toutes les cases à cocher NON cochée pour correspondre à l'état actuel de vérification involk er:

function selectAll(involker) 
{ 
    $("input:checkbox:not(:checked").attr("checked",involker.checked); 
}; 

Et de jeter dans un autre, je l'ai trouvé utile avec une « case maître/bouton clicker »: activer toutes les cases de l'état actuel

Définissez toutes les cases à cocher en face de leur réglage actuel : (hypothèse d'objet avec id = 'toggleCheckboxes de l'attribut) Set

$('#toggleCheckboxes').click(function() 
{ 
    $("input:checkbox").each(function() { 
     this.checked = !this.checked; 
    }); 
}); 

toutes les cases pour correspondre à la valeur actuelle de case maître: (hypothèse d'objet case d'entrée avec id = attribut « masterCheckbox »)

$('#masterCheckbox:checkbox').change(function() 
{ 
    var master = this.checked; 
    $(".childCheckbox input:checkbox").each(function() { 
     this.checked = master; 
    }); 
}); 
Questions connexes