Как получить значения флажков в jQuery
Как использовать jQuery, чтобы получить значения отмеченных флажков и сразу же помещать их в текстовое поле?
Также как этот код:
<html>
<head>
</head>
<body>
<div id="c_b">
<input type="checkbox" value="one_name" checked>
<input type="checkbox" value="one_name1">
<input type="checkbox" value="one_name2">
</div>
<textarea id="t"></textarea>
</body>
</html>
Если id="c_d"
обновляется Ajax, ниже код altCognito не работает. Есть ли хорошее решение?
Ответы
Ответ 1
Здесь один, который работает (см. пример):
function updateTextArea() {
var allVals = [];
$('#c_b :checked').each(function() {
allVals.push($(this).val());
});
$('#t').val(allVals);
}
$(function() {
$('#c_b input').click(updateTextArea);
updateTextArea();
});
Update
Некоторое число месяцев спустя был задан другой вопрос относительно того, как сохранить вышеописанное, если ID изменится. Ну, решение сводится к отображению функции updateTextArea во что-то общее, которое использует классы CSS, и использовать функцию live для мониторинга DOM для этих изменений.
Ответ 2
Вы также можете вернуть все выбранные значения флажков в строку, разделенную запятыми.
Это также облегчит вам, когда вы отправите его как параметр SQL
Вот пример, который возвращает все выбранные флажки, которые имеют имя "chkboxName" в отдельной строке запятой
И вот javascript
function showSelectedValues()
{
alert($("input[name=chkboxName]:checked").map(
function () {return this.value;}).get().join(","));
}
Вот пример HTML
<html>
<head>
</head>
<body>
<div>
<input name="chkboxName" type="checkbox" value="one_name" checked>
<input name="chkboxName" type="checkbox" value="one_name1">
<input name="chkboxName" type="checkbox" value="one_name2">
</div>
</body>
</html>
Ответ 3
Ваш вопрос довольно расплывчатый, но я думаю, что это то, что вам нужно:
$(function() {
$('input[type="checkbox"]').bind('click',function() {
if($(this).is(':checked')) {
$('#some_textarea').html($(this).val());
}
});
});
Изменить: О, ладно.. ты туда... У тебя раньше не было HTML. В любом случае, да, я думал, вы хотели бы поместить значение в текстовое поле, когда его нажимают. Если вы хотите, чтобы отмеченные значения флажков были помещены в текстовое поле (возможно, с хорошим разделением запятой) при загрузке страницы, это было бы так же просто, как:
$(function() {
$('#c_b input[type="checkbox"]:checked').each(function() {
$('#t').append(', '+$(this).val());
});
});
Изменить 2 Как и сделали люди, вы также можете сделать это, чтобы сократить длинный селектор, который я написал:
$('#c_b :checkbox:checked').each(function() {
$('#t').append(', '+$(this).val());
});
... Я полностью забыл об этом ярлыке.;)
Ответ 4
Это отлично работает для меня:
alert($("input[name=chkboxName]:checked").map(function() {
return this.value;
}).get().join(","));
Спасибо Мохамед Эль Шейх
Ответ 5
Спасибо altCognito, ваше решение помогло. Мы также можем сделать это, используя имя флажков:
function updateTextArea() {
var allVals = [];
$('[name=chkbox]:checked').each(function() {
allVals.push($(this).val());
});
$('#t').val(allVals)
}
$(function() {
$('#c_b input').click(updateTextArea);
updateTextArea();
});
Ответ 6
Следующее может быть полезно, так как я получил здесь немного другое решение. Мой script должен был автоматически циклически вводить элементы ввода и должен был возвращать свои значения (для функции jQuery.post()), проблема заключалась в том, что флажки возвращают свои значения независимо от состояния проверки. Это было мое решение:
jQuery.fn.input_val = function(){
if(jQuery(this).is("input[type=checkbox]")) {
if(jQuery(this).is(":checked")) {
return jQuery(this).val();
} else {
return false;
}
} else {
return jQuery(this).val();
}
};
Использование:
jQuery(".element").input_val();
Если заданное поле ввода является флажком, функция input_val возвращает только значение, если оно отмечено. Для всех остальных элементов значение возвращается независимо от выбранного состояния.
Ответ 7
Здесь альтернатива, если вам нужно сохранить значение переменной:
var _t = $('#c_b :checkbox:checked').map(function() {
return $(this).val();
});
$('#t').append(_t.join(','));
(map() возвращает массив, который я нахожу более удобным, чем текст в textarea).
Ответ 8
$(document).ready(function() {
$(':checkbox').click(function(){
var cObj = $(this);
var cVal = cObj.val();
var tObj = $('#t');
var tVal = tObj.val();
if( cObj.attr("checked")) {
tVal = tVal + "," + cVal;
$('#t').attr("value", tVal);
} else {
//TODO remove unchecked value.
}
});
});
Ответ 9
function updateTextArea() {
var allVals = $('#c_b :checked').map(function() {
return $(this).val();
}).get();
$('#t').val(allVals)
}
$(function() {
$('#c_b input').click(updateTextArea);
updateTextArea();
});
Ответ 10
$("#t").text($("#cb").find(":checked").val())
Ответ 11
В любом случае вам, вероятно, понадобится что-то вроде этого:
var val = $('#c_b :checkbox').is(':checked').val();
$('#t').val( val );
При этом будет отображаться значение первого флажка на странице и вставить его в текстовое поле с помощью id='textarea'
.
Обратите внимание, что в вашем примере кода вы должны поместить флажки в форму.
Ответ 12
Более простой и короткий путь, который я использую, чтобы выполнить то же самое, используя ответ из другого сообщения, выглядит следующим образом:
var checkedCities = $('input[name=city]:checked').map(function() {
return this.value;
}).get();
Первоначально города извлекаются из базы данных MySQL и зацикливаются на PHP во время цикла:
while ($data = mysql_fetch_assoc($all_cities)) {
<input class="city" name="city" id="<?php echo $data['city_name']; ?>" type="checkbox" value="<?php echo $data['city_id']; ?>" /><?php echo $data['city_name']; ?><br />
<?php } ?>
Теперь, используя вышеуказанный код jQuery, я получаю все значения city_id и возвращаю обратно в базу данных с помощью $.get(...)
Это облегчило мою жизнь, так как теперь код полностью динамичен. Чтобы добавить больше городов, все, что мне нужно сделать, это добавить в мою базу данных больше городов и не беспокоиться о завершении работы PHP или jQuery.
Ответ 13
<html>
<head>
<title>jQuery check / uncheck a check box example</title>
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
</head>
<body>
<h1>jQuery check / uncheck a check box example</h1>
<script type="text/javascript">
$(document).ready(function(){
$("#isCheck").click(function () {
alert($('input:checkbox[name=checkme]').is(':checked'));
});
$("#checkIt").click(function () {
$('input:checkbox[name=checkme]').attr('checked',true);
});
$("#UnCheckIt").click(function () {
$('input:checkbox[name=checkme]').attr('checked',false);
});
});
</script>
</head><body>
<input type="checkbox" name="checkme">Check Me</input>
<br/>
<br/>
<br/>
<input type='button' value='Is Check' id='isCheck'>
<input type='button' value='Check It' id='checkIt'>
<input type='button' value='UnCheck It' id='UnCheckIt'>
</body>
</html>
Ответ 14
Если вы хотите сразу же вставить значение любого флажка, так как это ebing ckecked, то это должно сработать для вас
$(":checkbox").click(function(){
$("#id").text(this.value)
})
Ответ 15
У меня была аналогичная проблема, и именно так я решил ее с помощью приведенных выше примеров:
$(".ms-drop").click(function () {
$(function showSelectedValues() {
alert($(".ms-drop input[type=checkbox]:checked").map(
function () { return this.value; }).get().join(","));
});
});
Ответ 16
Попробуйте это.
var listCheck = [];
console.log($("input[name='YourCheckBokName[]']"));
$("input[name='YourCheckBokName[]']:checked").each(function() {
console.log($(this).val());
listCheck .push($(this).val());
});
console.log(listCheck);