2009-07-03 2 views
3

У меня есть форма HTML, содержащие флажки в форме ..Как «проверить» определенные флажки только с помощью 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 /> 

С этим JS кодом I Выделить все или Удалить все галочки

$('#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; 
    }); 
}); 

Но мне нужна функциональность, где пользователь сможет иметь определенные флажки выбраны, в зависимости от входного

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

так что если пользователь вводит от 5 до 20 и нажимает на значок он проверяет флажки из 5-20.

Не могли бы вы помочь мне представить, как это можно достичь. Я могу изменить разметку, чтобы применить некоторые идентификаторы классов/selecter и т. Д., Если вы предложите, если это упростит ситуацию. И я понимаю, что эта функция предназначена для пользователей, имеющих браузеры с поддержкой javascript.

Спасибо.

+0

Только быстрое примечание: вам не придется перебрать все флажки для проверки каждого из кода. Это будет более быстрый эквивалент: $ ('input.range_opts'). Attr ('checked', true); –

+0

@Paolo .. спасибо за отзыв. – TigerTiger

ответ

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 .. не могли бы вы помочь мне знать, как эти gt и lt работают? Я имею в виду, что они сравнивают значение «id элемента»? Спасибо – TigerTiger

+0

http://docs.jquery.com/Selectors/gt#index: gt() и: lt() работают с индексом в наборе и начинаются с 0. Скажем, $ ("blah") возвращает 10 элементов. $ ("blah: gt (7)") вернет 9-й и 10-й позиции (индекс 7 по 0 - 8-й элемент). – cletus

+0

ах я вижу. Круто. Спасибо за помощь. – TigerTiger

1

Как насчет:

$('#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

Да, я только что закончил писать почти так же. Спасибо, в любом случае. – TigerTiger

0

Да, вы можете просто проверить index при выборе флажков:

$('#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); 
}); 
Смежные вопросы