2009-07-03 9 views
3

J'ai un formulaire HTML contenant des cases à cocher sous forme de ..Comment "cocher" certaines cases uniquement en utilisant Jquery?

<input type="checkbox" name="range[]" class="range_opts" id="range-1" value="1" /> 1 <br /> 
<input type="checkbox" name="range[]" class="range_opts" id="range-2" value="2" /> 2 <br /> 
<input type="checkbox" name="range[]" class="range_opts" id="range-3" value="3" /> 3 <br /> 
     ... 
     ... 
<input type="checkbox" name="range[]" class="range_opts" id="range-28" value="28" /> 28<br /> 
<input type="checkbox" name="range[]" class="range_opts" id="range-29" value="29" /> 29<br /> 
<input type="checkbox" name="range[]" class="range_opts" id="range-30" value="30" /> 30<br /> 

Avec ce JS Code I Sélectionner tout ou désélectionner toutes les cases

$('#select_all_ranges').click(function() { 
    $('input[name="range[]"]').each(function() { 
     this.checked = true; 
    }); 
}); 
$('#deselect_all_ranges').click(function() { 
    $('input[name="range[]"]').each(function() { 
     this.checked = false; 
    }); 
}); 

Mais je besoin de la fonctionnalité où serait en mesure utilisateur avoir certaines cases sélectionnées, en fonction de l'entrée

<input type="text" name="from_range" id="frm_range" /> 
    <input type="text" name="to_range" id="to_range" /> 
    <img src="icon.png" id="range123" /> 

donc si des entrées d'utilisateur à partir de 5 à 20 et clique sur l'icône, il vérifie à partir des cases à cocher 5-20.

Pouvez-vous m'aider s'il vous plaît quelques idées comment ceci peut être réalisé. Je peux modifier le balisage pour appliquer certaines classes/sélecteurs, etc. Si vous le suggérez, cela faciliterait la tâche. Et je comprends que cette fonctionnalité est pour les utilisateurs ayant des navigateurs compatibles avec javascript.

Merci.

+0

Juste une note rapide: vous n'avez pas à boucle à travers tous les cases à cocher pour vérifier chacun dans votre code. Ce serait un équivalent plus rapide: $ ('input.range_opts'). Attr ('checked', true); –

+0

@Paolo .. merci pour le conseil. – TigerTiger

Répondre

3
$("#range123").click(function() { 
    var from = $("#frm_range").val(); 
    var to = $("#to_range").val(); 
    var expr = ":checkbox.range_opts:lt(" + to + ")"; 
    if (from > 1) { 
    expr += ":gt(" + (from-1) + ")"; 
    } 
    $(expr).attr("checked", true); 
}); 
+0

@cletus .. pouvez-vous s'il vous plaît m'aider à savoir comment fonctionnent ces gt et lt? Je veux dire, est-ce qu'ils comparent la valeur "id d'élément"? Merci – TigerTiger

+0

http://docs.jquery.com/Selectors/gt#index: gt() et: lt() travaillent sur l'index dans l'ensemble et commencent à 0. Say $ ("blah") renvoie 10 éléments. $ ("blah: gt (7)") retournera le 9ème et le 10ème item (7 sur 0 index est le 8ème item). – cletus

+0

ah je vois. Cool. Merci pour ton aide. – TigerTiger

1

Que diriez-vous:

$('#range123').click(function() { 
    var bottom = $("#frm_range").value; 
    var top = $("#to_range").value; 
    $('input[name="range[]"]').each(function() { 
      this.checked = ((this.value > bottom) && (this.value < top)); 
    }); 
}); 
+0

Oui, j'avais juste fini d'écrire presque pareil. Merci quand même. – TigerTiger

0

Oui, vous pouvez simplement vérifier la index tout en sélectionnant les cases à cocher:

$('#select_all_ranges').click(function() { 
    var from = $('#frm_range').val(); 
    var to = $('#to_range').val(); 
    var expr = '.range_opts:gt(' + (from-2) + '):lt(' + (to-1) + ')'; 
    $(expr).attr("checked", true); 
}); 
Questions connexes