Comment utiliser jQuery pour obtenir les valeurs des cases à cocher, et le mettre immédiatement dans une zone de texte?
Juste comme ce code:
<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>
Si le id="c_d"
est mis à jour par Ajax , le code ci-dessous du code altCognito ne fonctionne pas. Y a-t-il une bonne solution?
En voici un qui fonctionne ( voir l'exemple ):
function updateTextArea() {
var allVals = [];
$('#c_b :checked').each(function() {
allVals.Push($(this).val());
});
$('#t').val(allVals);
}
$(function() {
$('#c_b input').click(updateTextArea);
updateTextArea();
});
Un certain nombre de mois plus tard, une autre question a été posée sur la manière de continuer à utiliser ce qui précède si l’ID change. Eh bien, la solution consiste à mapper la fonction updateTextArea en quelque chose de générique qui utilise des classes CSS et à utiliser la fonction live pour surveiller le DOM pour ces modifications.
Vous pouvez également renvoyer toutes les valeurs des cases à cocher sélectionnées dans une chaîne séparée par des virgules. Cela vous facilitera également la tâche lorsque vous l'enverrez en tant que paramètre à SQL.
Voici un exemple qui renvoie toutes les valeurs de cases à cocher sélectionnées portant le nom "chkboxName" dans une chaîne séparée par des virgules.
Et voici le javascript
function showSelectedValues()
{
alert($("input[name=chkboxName]:checked").map(
function () {return this.value;}).get().join(","));
}
Voici l'exemple 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>
Votre question est assez vague mais je pense que c'est ce dont vous avez besoin:
$(function() {
$('input[type="checkbox"]').bind('click',function() {
if($(this).is(':checked')) {
$('#some_textarea').html($(this).val());
}
});
});
Edit: Oh, d'accord .. voilà ... Vous n'aviez pas le code HTML en place avant. Quoi qu'il en soit, oui, je pensais que vous vouliez mettre la valeur dans une zone de texte lorsque vous cliquez dessus. Si vous voulez que les valeurs des cases à cocher soient placées dans la zone de texte (peut-être avec une séparation par virgule de Nice) lors du chargement de la page, ce serait aussi simple que:
$(function() {
$('#c_b input[type="checkbox"]:checked').each(function() {
$('#t').append(', '+$(this).val());
});
});
Edit 2 Comme les gens l'ont fait, vous pouvez également le faire pour raccourcir le long sélecteur que j'ai écrit:
$('#c_b :checkbox:checked').each(function() {
$('#t').append(', '+$(this).val());
});
... J'ai totalement oublié ce raccourci. ;)
Cela fonctionne parfaitement pour moi:
alert($("input[name=chkboxName]:checked").map(function() {
return this.value;
}).get().join(","));
Merci Mohamed El Cheikh
Merci altCognito, votre solution a aidé. Nous pouvons également le faire en utilisant le nom des cases à cocher:
function updateTextArea() {
var allVals = [];
$('[name=chkbox]:checked').each(function() {
allVals.Push($(this).val());
});
$('#t').val(allVals)
}
$(function() {
$('#c_b input').click(updateTextArea);
updateTextArea();
});
Ce qui suit peut être utile puisque je suis arrivé ici à la recherche d’une solution légèrement différente. Mon script devait parcourir automatiquement les éléments d'entrée et devait renvoyer leurs valeurs (pour la fonction jQuery.post ()). Le problème était lié aux cases à cocher renvoyant leurs valeurs, quel que soit l'état coché. C'était ma solution:
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();
}
};
Usage:
jQuery(".element").input_val();
Si le champ de saisie donné est une case à cocher, la fonction input_val ne renvoie une valeur que si elle est cochée. Pour tous les autres éléments, la valeur est renvoyée quel que soit l'état coché.
Voici une alternative au cas où vous auriez besoin de sauvegarder la valeur dans une variable:
var _t = $('#c_b :checkbox:checked').map(function() {
return $(this).val();
});
$('#t').append(_t.join(','));
(map () retourne un tableau, que je trouve plus pratique que le texte de textarea).
function updateTextArea() {
var allVals = $('#c_b :checked').map(function() {
return $(this).val();
}).get();
$('#t').val(allVals)
}
$(function() {
$('#c_b input').click(updateTextArea);
updateTextArea();
});
Quoi qu'il en soit, vous avez probablement besoin de quelque chose comme ça:
var val = $('#c_b :checkbox').is(':checked').val();
$('#t').val( val );
Cela aura la valeur de la première case à cocher cochée sur la page et l'insérera dans la zone de texte avec id='textarea'
.
Notez que dans votre exemple de code, vous devez mettre les cases à cocher dans un formulaire.
Voici un moyen beaucoup plus simple et rapide que j'utilise pour accomplir la même chose, en utilisant la réponse d'un autre message:
var checkedCities = $('input[name=city]:checked').map(function() {
return this.value;
}).get();
A l'origine, les villes étaient extraites d'une base de données MySQL et bouclées dans PHP boucle while:
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 } ?>
Maintenant, en utilisant le code jQuery ci-dessus, je récupère toutes les valeurs de city_id et le renvoie à la base de données à l'aide de $ .get (...)
Cela a rendu ma vie si facile depuis que le code est entièrement dynamique. Afin d'ajouter plus de villes, tout ce que j'ai à faire, c'est d'ajouter plus de villes dans ma base de données, et aucun souci sur PHP ni sur la fin de jQuery.
$("#t").text($("#cb").find(":checked").val())
Si vous voulez insérer immédiatement la valeur d'une case à cocher pendant qu'elle est cochée, cela devrait fonctionner pour vous:
$(":checkbox").click(function(){
$("#id").text(this.value)
})
Essaye celui-là..
var listCheck = [];
console.log($("input[name='YourCheckBokName[]']"));
$("input[name='YourCheckBokName[]']:checked").each(function() {
console.log($(this).val());
listCheck .Push($(this).val());
});
console.log(listCheck);
J'ai eu un problème similaire et voici comment je l'ai résolu en utilisant les exemples ci-dessus:
$(".ms-drop").click(function () {
$(function showSelectedValues() {
alert($(".ms-drop input[type=checkbox]:checked").map(
function () { return this.value; }).get().join(","));
});
});