Question

J'ai un tas de cases à cocher qui sont cochées par défaut.Mes utilisateurs décocheront probablement quelques cases (le cas échéant) et laisseront le reste coché.

Existe-t-il un moyen de faire en sorte que le formulaire POST les cases à cocher qui sont pas vérifiés, plutôt que ceux qui sont vérifié?

Était-ce utile?

La solution

Ajoutez une entrée masquée pour la case à cocher avec un ID différent:

<input id='testName' type='checkbox' value='Yes' name='testName'>
<input id='testNameHidden' type='hidden' value='No' name='testName'>

Avant de soumettre le formulaire, désactivez l'entrée masquée en fonction de la condition cochée:

if(document.getElementById("testName").checked) {
    document.getElementById('testNameHidden').disabled = true;
}

Autres conseils

La solution qui m’a le plus plu jusqu’à présent consiste à mettre une entrée cachée portant le même nom que la case à cocher qui pourrait ne pas être cochée. Je pense que cela fonctionne de sorte que si la case à cocher n'est pas cochée, la saisie masquée est toujours réussie et envoyée au serveur, mais si la case à cocher est cochée, elle remplacera la saisie masquée avant celle-ci. De cette façon, vous n'avez pas besoin de savoir quelles valeurs dans les données publiées doivent provenir de cases à cocher.

<form>
  <input type='hidden' value='0' name='selfdestruct'>
  <input type='checkbox' value='1' name='selfdestruct'>
</form>

Je l'ai résolu en utilisant du JavaScript JavaScript:

<input type="hidden" name="checkboxName" value="0"><input type="checkbox" onclick="this.previousSibling.value=1-this.previousSibling.value">

Veillez à ne pas laisser d'espaces ni de sauts de ligne entre ces deux éléments d'entrée!

Vous pouvez utiliser this.previousSibling.previousSibling pour obtenir & "supérieur &"; éléments.

Avec PHP, vous pouvez vérifier le champ caché nommé pour 0 (non défini) ou 1 (défini).

Mon favori personnel consiste à ajouter un champ masqué du même nom qui sera utilisé si la case à cocher n'est pas cochée. Mais la solution n’est pas aussi simple que cela puisse paraître.

Si vous ajoutez ce code:

<form>
  <input type='hidden' value='0' name='selfdestruct'>
  <input type='checkbox' value='1' name='selfdestruct'>
</form>

Le navigateur ne se souciera pas vraiment de ce que vous faites ici. Le navigateur envoie les deux paramètres au serveur, qui doit alors décider quoi en faire.

PHP, par exemple, prend la dernière valeur comme celle à utiliser (voir: Position faisant autorité pour les clés de requête HTTP GET en double )

Mais les autres systèmes avec lesquels j'ai travaillé (basés sur Java) le font comme il se doit - ils ne vous offrent que la première valeur. .NET à la place vous donnera un tableau avec les deux éléments à la place

Je vais essayer de tester cela avec node.js, Python et Perl à un moment donné.

Une technique courante consiste à transporter une variable cachée avec chaque case à cocher.

<input type="checkbox" name="mycheckbox" />
<input type="hidden" name="mycheckbox.hidden"/>

Du côté du serveur, nous détectons d’abord la liste des variables cachées et pour chacune des variables cachées, nous essayons de voir si l’entrée de case à cocher correspondante est soumise ou non dans les données du formulaire.

L'algorithme côté serveur ressemblerait probablement à ceci:

for input in form data such that input.name endswith .hidden
  checkboxName = input.name.rstrip('.hidden')
  if chceckbName is not in form, user has unchecked this checkbox

Ce qui précède ne répond pas exactement à la question, mais offre un autre moyen d’obtenir des fonctionnalités similaires.

vous n'avez pas besoin de créer un champ caché pour toutes les cases à cocher, copiez simplement mon code. si la case à cocher n'est pas cochée, la valeur de la case à cocher value sera affectée à 0 et si la case à cocher est cochée, attribuez 1 à <=>

.
$("form").submit(function () {

    var this_master = $(this);

    this_master.find('input[type="checkbox"]').each( function () {
        var checkbox_this = $(this);


        if( checkbox_this.is(":checked") == true ) {
            checkbox_this.attr('value','1');
        } else {
            checkbox_this.prop('checked',true);
            //DONT' ITS JUST CHECK THE CHECKBOX TO SUBMIT FORM DATA    
            checkbox_this.attr('value','0');
        }
    })
})

Vous pouvez faire du Javascript dans l'événement submit du formulaire. C'est tout ce que vous pouvez faire cependant, il n'y a aucun moyen de faire en sorte que les navigateurs le fassent par eux-mêmes. Cela signifie également que votre formulaire va casser pour les utilisateurs sans Javascript. Mieux vaut savoir sur le serveur quelles sont les cases à cocher, vous pouvez donc en déduire que celles qui sont absentes des valeurs de formulaire publiées ($_POST en PHP) ne sont pas cochées.

$('input[type=checkbox]').on("change",function(){
    var target = $(this).parent().find('input[type=hidden]').val();
    if(target == 0)
    {
        target = 1;
    }
    else
    {
        target = 0;
    }
    $(this).parent().find('input[type=hidden]').val(target);
});

                      

<p>
    <input type="checkbox" />
    <input type="hidden" name="test_checkbox[]" value="0" />
</p>
<p>
    <input type="checkbox" />
    <input type="hidden" name="test_checkbox[]" value="0" />
</p>
<p>
    <input type="checkbox" />
    <input type="hidden" name="test_checkbox[]" value="0" />
</p>

Si vous omettez le nom de la case à cocher, cela ne sera pas passé. Seul le tableau test_checkbox.

Je voudrais réellement faire ce qui suit.

Avoir mon champ de saisie caché avec le même nom avec l'entrée de case à cocher

<input type="hidden" name="checkbox_name[]" value="0" />
<input type="checkbox" name="checkbox_name[]" value="1" />

et ensuite, lorsque je poste, je supprime tout d'abord les valeurs dupliquées collectées dans le tableau $ _POST, en affichant chacune des valeurs uniques.

  $posted = array_unique($_POST['checkbox_name']);
  foreach($posted as $value){
    print $value;
  }

Cela vient d'un message supprimer les valeurs en double du tableau

& Je suis parti avec l'approche de serveur. Semble bien fonctionner - merci. & # 8211; reach4thelasers 1 décembre 09 à 15:19 & '; Je voudrais le recommander par le propriétaire. Comme indiqué: la solution javascript dépend de la façon dont le gestionnaire de serveur (je ne l'ai pas vérifié)

tel que

if(!isset($_POST["checkbox"]) or empty($_POST["checkbox"])) $_POST["checkbox"]="something";

La plupart des réponses ici nécessitent l'utilisation de JavaScript ou de contrôles de saisie en double. Parfois, cela doit être entièrement géré côté serveur.

Je crois que la solution (prévue) pour résoudre ce problème courant est le contrôle des entrées de soumission du formulaire.

Pour interpréter et gérer correctement les valeurs non vérifiées des cases à cocher, vous devez connaître les éléments suivants:

  1. Les noms des cases à cocher
  2. Nom de l'élément d'entrée de soumission du formulaire

En vérifiant si le formulaire a été soumis (une valeur est affectée à l'élément d'entrée soumission), toutes les valeurs de cases à cocher non cochées peuvent être supposées .

Par exemple:

<form name="form" method="post">
  <input name="value1" type="checkbox" value="1">Checkbox One<br/>
  <input name="value2" type="checkbox" value="1" checked="checked">Checkbox Two<br/>
  <input name="value3" type="checkbox" value="1">Checkbox Three<br/>
  <input name="submit" type="submit" value="Submit">
</form>

Lorsque vous utilisez PHP, il est assez simple de détecter les cases à cocher qui ont été cochées.

<?php

$checkboxNames = array('value1', 'value2', 'value3');

// Persisted (previous) checkbox state may be loaded 
// from storage, such as the user's session or a database.
$checkboxesThatAreChecked = array(); 

// Only process if the form was actually submitted.
// This provides an opportunity to update the user's 
// session data, or to persist the new state of the data.

if (!empty($_POST['submit'])) {
    foreach ($checkboxNames as $checkboxName) {
        if (!empty($_POST[$checkboxName])) {
            $checkboxesThatAreChecked[] = $checkboxName;
        }
    }
    // The new state of the checkboxes can be persisted 
    // in session or database by inspecting the values 
    // in $checkboxesThatAreChecked.
    print_r($checkboxesThatAreChecked);
}

?>

Les données initiales peuvent être chargées à chaque chargement de page, mais ne doivent être modifiées que si le formulaire a été soumis. Comme les noms des cases à cocher sont connus à l’avance, ils peuvent être parcourus et inspectés individuellement, de sorte que l’absence de leurs valeurs individuelles indique qu’elles ne sont pas cochées.

J'ai d'abord essayé la version de Sam. Bonne idée, mais cela entraîne la présence de plusieurs éléments du même nom. Si vous utilisez un code javascript qui trouve des éléments en fonction de leur nom, il renverra désormais un tableau d'éléments.

J'ai élaboré l'idée de Shailesh en PHP, cela fonctionne pour moi. Voici mon code:

/* Delete '.hidden' fields if the original is present, use '.hidden' value if not. */
foreach ($_POST['frmmain'] as $field_name => $value)
{
    // Only look at elements ending with '.hidden'
    if ( !substr($field_name, -strlen('.hidden')) ) {
        break;
    }

    // get the name without '.hidden'
    $real_name = substr($key, strlen($field_name) - strlen('.hidden'));

    // Create a 'fake' original field with the value in '.hidden' if an original does not exist
    if ( !array_key_exists( $real_name, $POST_copy ) ) {
        $_POST[$real_name] = $value;
    }

    // Delete the '.hidden' element
    unset($_POST[$field_name]);
}

J'utilise ce bloc de jQuery, qui ajoutera une entrée masquée lors de l'envoi à chaque case à cocher non cochée. Vous aurez ainsi toujours une valeur soumise pour chaque case à cocher, sans encombrer votre balisage et risquer de vous faire oublier de le faire sur une case à cocher que vous ajouterez plus tard. Il est également agnostique vis-à-vis de la pile de serveurs (PHP, Ruby, etc.) que vous utilisez.

// Add an event listener on #form's submit action...
$("#form").submit(
    function() {

        // For each unchecked checkbox on the form...
        $(this).find($("input:checkbox:not(:checked)")).each(

            // Create a hidden field with the same name as the checkbox and a value of 0
            // You could just as easily use "off", "false", or whatever you want to get
            // when the checkbox is empty.
            function(index) {
                var input = $('<input />');
                input.attr('type', 'hidden');
                input.attr('name', $(this).attr("name")); // Same name as the checkbox
                input.attr('value', "0"); // or 'off', 'false', 'no', whatever

                // append it to the form the checkbox is in just as it's being submitted
                var form = $(this)[0].form;
                $(form).append(input);

            }   // end function inside each()
        );      // end each() argument list

        return true;    // Don't abort the form submit

    }   // end function inside submit()
);      // end submit() argument list

Vous pouvez également intercepter l'événement form.submit et effectuer une vérification inversée avant de l'envoyer

$('form').submit(function(event){
    $('input[type=checkbox]').prop('checked', function(index, value){
        return !value;
    });
});

J'aime aussi la solution qui consiste à poster un champ de saisie supplémentaire, l'utilisation de JavaScript me paraissant un peu compliquée.

En fonction de ce que vous utilisez pour votre backend, cela dépend de la première entrée.

Pour un serveur dorsal sur lequel la première occurrence est utilisée (JSP), procédez comme suit:

  <input type="checkbox" value="1" name="checkbox_1"/>
  <input type="hidden" value="0" name="checkbox_1"/>


Pour un serveur serveur où la dernière occurrence est utilisée (PHP, Rails), procédez comme suit:

  <input type="hidden" value="0" name="checkbox_1"/>
  <input type="checkbox" value="1" name="checkbox_1"/>


Pour un serveur backend où toutes les occurrences sont stockées dans un type de données de liste ([], array). (Python / Zope)

Vous pouvez poster dans l'ordre que vous voulez, il vous suffit d'essayer d'obtenir la valeur de l'entrée avec l'attribut checkbox type. Ainsi, le premier index de la liste si la case à cocher était avant l'élément masqué et le dernier index si la case à cocher était après l'élément masqué.


Pour un serveur principal où toutes les occurrences sont concaténées avec une virgule (ASP.NET / IIS) Vous devrez (scinder / exploser) la chaîne en utilisant une virgule comme délimiteur pour créer un type de données de liste. (<=>)

Maintenant, vous pouvez essayer de saisir le premier index de la liste si la case à cocher était avant l'élément caché et de saisir le dernier index si la case à cocher était après l'élément caché.

 Gestion des paramètres d’arrière-plan

source d'image

Je vois que cette question est ancienne et a beaucoup de réponses, mais je vais quand même donner mon sou. Mon vote est pour la solution javascript sur l'événement 'submit' du formulaire, comme certains l'ont souligné. Pas de doubler les entrées (surtout si vous avez des noms longs et des attributs avec du code php mélangé avec du html), pas de soucis côté serveur (cela nécessiterait de connaître tous les noms de champs et de les vérifier un par un), il suffit de récupérer tous les éléments non vérifiés , attribuez-leur une valeur 0 (ou ce dont vous avez besoin pour indiquer un statut «non vérifié»), puis remplacez leur attribut «vérifié» par true

.
    $('form').submit(function(e){
    var b = $("input:checkbox:not(:checked)");
    $(b).each(function () {
        $(this).val(0); //Set whatever value you need for 'not checked'
        $(this).attr("checked", true);
    });
    return true;
});

Ainsi, vous aurez un tableau $ _POST comme ceci:

Array
(
            [field1] => 1
            [field2] => 0
)
$('form').submit(function () {
    $(this).find('input[type="checkbox"]').each( function () {
        var checkbox = $(this);
        if( checkbox.is(':checked')) {
            checkbox.attr('value','1');
        } else {
            checkbox.after().append(checkbox.clone().attr({type:'hidden', value:0}));
            checkbox.prop('disabled', true);
        }
    })
});

Je sais que cette question a 3 ans mais j'ai trouvé une solution qui, à mon avis, fonctionne assez bien.

Vous pouvez vérifier si la variable $ _POST est assignée et l'enregistrer dans une variable.

$value = isset($_POST['checkboxname'] ? 'YES' : 'NO';

la fonction isset () vérifie si la variable $ _POST est assignée. En logique, si elle n’est pas attribuée, la case à cocher n’est pas cochée.

Ce que j'ai fait était un peu différent. J'ai d'abord changé les valeurs de toutes les cases à cocher non cochées. Pour & Quot; 0 & Quot ;, puis les a tous sélectionnés, la valeur serait alors soumise.

function checkboxvalues(){
  $("#checkbox-container input:checkbox").each(function({ 
    if($(this).prop("checked")!=true){
      $(this).val("0");
      $(this).prop("checked", true);
    }
  });
}

Je préférerais rassembler le $ _POST

if (!$_POST['checkboxname']) !$_POST['checkboxname'] = 0;

Cela ne dérange pas que, si le POST n’ait pas la valeur 'checkboxname', il n’a pas été vérifié, vous pouvez donc lui attribuer une valeur.

vous pouvez créer un tableau de vos valeurs ckeckbox et créer une fonction qui vérifie si des valeurs existent, si elle ne le fait pas, les cotes sont décochées et vous pouvez attribuer une valeur

L'exemple sur les actions Ajax est (': vérifié') utilisé jQuery au lieu de .val ();

            var params = {
                books: $('input#users').is(':checked'),
                news : $('input#news').is(':checked'),
                magazine : $('input#magazine').is(':checked')
            };

Les paramètres auront une valeur en VRAI OU FAUX ..

Les cases à cocher représentent généralement des données binaires stockées dans la base de données sous forme de valeurs Oui / Non, Y / N ou 1/0. Les cases à cocher HTML ont une nature incorrecte pour envoyer de la valeur au serveur uniquement si la case à cocher est cochée! Cela signifie que le script de serveur d'un autre site doit savoir à l'avance quelles sont toutes les cases à cocher possibles sur une page Web afin de pouvoir stocker des valeurs positives (cochées) ou négatives (non cochées). En réalité, seules les valeurs négatives posent problème (lorsque l'utilisateur décoche la valeur précédemment vérifiée - comment le serveur peut-il le savoir lorsque rien n'est envoyé s'il ne sait pas à l'avance que ce nom doit être envoyé). Si vous avez un script côté serveur qui crée dynamiquement le script UPDATE, il y a un problème car vous ne savez pas ce que toutes les cases à cocher doivent être reçues afin de définir la valeur Y pour les valeurs cochées et N pour celles non cochées (non reçues).

Etant donné que je stocke les valeurs 'Y' et 'N' dans ma base de données et que je les représente via les cases à cocher cochées et non cochées de la page, j'ai ajouté un champ caché pour chaque valeur (case à cocher) avec les valeurs 'Y' et 'N', puis j'utilise les cases à cocher. juste pour la représentation visuelle, et utilisez la simple fonction JavaScript check () pour définir la valeur if si en fonction de la sélection.

<input type="hidden" id="N1" name="N1" value="Y" />
<input type="checkbox"<?php if($N1==='Y') echo ' checked="checked"'; ?> onclick="check(this);" />
<label for="N1">Checkbox #1</label>

utiliser un écouteur JavaScript onclick et appeler la fonction check () pour chaque case à cocher de ma page Web:

function check(me)
{
  if(me.checked)
  {
    me.previousSibling.previousSibling.value='Y';
  }
  else
  {
    me.previousSibling.previousSibling.value='N';
  }
}

De cette façon, les valeurs 'Y' ou 'N' sont toujours envoyées au script côté serveur, il sait quels champs doivent être mis à jour et la conversion de checbox & "sur &"; valeur dans 'Y' ou case non reçue dans 'N'.

REMARQUE: les espaces ou les nouvelles lignes sont également des frères et soeurs. Par conséquent, j’ai besoin de .previousSibling.previousSibling.value. S'il n'y a pas d'espace entre, alors seulement .previousSibling.value

Vous n'avez pas besoin d'ajouter explicitement onclick listener comme auparavant, vous pouvez utiliser la bibliothèque jQuery pour ajouter de manière dynamique un écouteur de clic avec la fonction permettant de modifier la valeur de toutes les cases à cocher de votre page:

$('input[type=checkbox]').click(function()
{
  if(this.checked)
  {
    $(this).prev().val('Y');
  }
  else
  {
    $(this).prev().val('N');
  }
});

Le problème avec les cases à cocher est que si elles ne sont pas cochées, elles ne sont pas affichées avec votre formulaire. Si vous cochez une case et postez un formulaire, vous obtiendrez la valeur de la case dans la variable $ _POST que vous pourrez utiliser pour traiter un formulaire. Si cette case n'est pas cochée, aucune valeur ne sera ajoutée à la variable $ _POST.

En PHP, vous devriez normalement résoudre ce problème en effectuant une vérification isset () sur votre élément de case à cocher. Si l'élément que vous attendez n'est pas défini dans la variable $ _POST, nous savons que la case à cocher n'est pas cochée et que la valeur peut être false.

if(!isset($_POST['checkbox1']))
{
     $checkboxValue = false;
} else {
     $checkboxValue = $_POST['checkbox1'];
}

Mais si vous avez créé un formulaire dynamique, vous ne connaîtrez pas toujours l'attribut name de vos cases à cocher. Si vous ne connaissez pas le nom de la case à cocher, vous ne pouvez pas utiliser la fonction isset pour vérifier si elle a été envoyé avec la variable $ _POST.

Cela ne peut être accompli qu'avec du javascript, car les cases à cocher non cochées ne sont pas transmises. Donc, vous avez besoin de javascript, par exemple. en coulisse ajoute des champs cachés en décochant une case à cocher. Sans JavaScript, cela ne pourrait pas être fait.

Il existe une meilleure solution de contournement. Tout d'abord, attribuez l'attribut name uniquement aux cases à cocher cochées. Cliquez ensuite sur submit, via un script JavaScript function, vous cochez toutes les cases non cochées. Ainsi, lorsque vous form collection seulement ceux-ci seront récupérés dans name ceux qui ont la <=> propriété.

  //removing name attribute from all checked checkboxes
                  var a = $('input:checkbox:checked');
                   $(a).each(function () {
                       $(this).removeAttr("name");        
                   });

   // checking all unchecked checkboxes
                   var b = $("input:checkbox:not(:checked)");
                   $(b).each(function () {
                       $(this).attr("checked", true);
                   });

Avantage: Pas besoin de créer des cases cachées supplémentaires et de les manipuler.

@cpburnz a bien compris, mais pour beaucoup de code, voici la même idée en utilisant moins de code:

JS:

// jQuery OnLoad
$(function(){
    // Listen to input type checkbox on change event
    $("input[type=checkbox]").change(function(){
        $(this).parent().find('input[type=hidden]').val((this.checked)?1:0);
    });
});

HTML (notez le nom du champ en utilisant un nom de tableau):

<div>
    <input type="checkbox" checked="checked">
    <input type="hidden" name="field_name[34]" value="1"/>
</div>
<div>
    <input type="checkbox">
    <input type="hidden" name="field_name[35]" value="0"/>
</div>
<div>

Et pour PHP:

<div>
    <input type="checkbox"<?=($boolean)?' checked="checked"':''?>>
    <input type="hidden" name="field_name[<?=$item_id?>]" value="<?=($boolean)?1:0?>"/>
</div>

Version jQuery de la réponse de @ vishnu.

if($('#testName').is(":checked")){
    $('#testNameHidden').prop('disabled', true);
}

Si vous utilisez jQuery 1.5 ou une version antérieure, utilisez la fonction .attr () au lieu de .prop ()

Cette solution est inspirée de celle de @ desw.

Si les noms de vos entrées sont & "style de formulaire &", vous perdrez l'association d'index de tableau avec vos valeurs de chekbox dès qu'une case est cochée, incrémentant cette & "; dissociation quot; par unité à chaque fois qu'une case à cocher est cochée. Cela peut être le cas d’un formulaire pour insérer quelque chose comme des employés composés de certains champs, par exemple:

<input type="text" name="employee[]" />
<input type="hidden" name="isSingle[] value="no" />
<input type="checkbox" name="isSingle[] value="yes" />

Si vous insérez trois employés à la fois et que le premier et le second sont célibataires, vous obtiendrez un tableau à 5 éléments isSingle. Vous ne pourrez donc pas parcourir simultanément les trois tableaux. afin, par exemple, d'insérer des employés dans une base de données.

Vous pouvez y remédier avec un post-traitement de tableau facile. J'utilise PHP côté serveur et je l'ai fait:

$j = 0;
$areSingles = $_POST['isSingle'];
foreach($areSingles as $isSingle){
  if($isSingle=='yes'){
    unset($areSingles[$j-1]);
  }
  $j++;
}
$areSingles = array_values($areSingles);

Cette solution est donc excessive pour cette question, mais elle m'a aidé lorsque j'avais la même case à cocher qui apparaissait plusieurs fois pour différentes lignes d'un tableau.J'avais besoin de connaître la ligne représentée par la case à cocher et également de connaître l'état de la case (cochée/décochée).

Ce que j'ai fait, c'est supprimer l'attribut name de mes entrées de case à cocher, leur donner à toutes la même classe et créer une entrée cachée qui contiendrait l'équivalent JSON des données.

HTML

 <table id="permissions-table">
    <tr>
	<td>
	    <input type="checkbox" class="has-permission-cb" value="Jim">
	    <input type="checkbox" class="has-permission-cb" value="Bob">
	    <input type="checkbox" class="has-permission-cb" value="Suzy">
	</td>
    </tr>
 </table>
 <input type="hidden" id="has-permissions-values" name="has-permissions-values" value="">

Javascript à exécuter lors de la soumission du formulaire

var perms = {};
$(".has-permission-checkbox").each(function(){
  var userName = this.value;
  var val = ($(this).prop("checked")) ? 1 : 0
  perms[userName] = {"hasPermission" : val};
});
$("#has-permissions-values").val(JSON.stringify(perms));

La chaîne json sera transmise sous la forme $_POST["has-permissions-values"].En PHP, décodez la chaîne dans un tableau et vous obtiendrez un tableau associatif contenant chaque ligne et la valeur vrai/faux pour chaque case à cocher correspondante.Il est alors très facile de parcourir et de comparer les valeurs actuelles de la base de données.

Toutes les réponses sont excellentes, mais si vous avez plusieurs cases dans un formulaire portant le même nom et que vous souhaitez afficher le statut de chaque case. Ensuite, j'ai résolu ce problème en plaçant un champ caché avec la case à cocher (nom correspondant à ce que je veux).

<input type="hidden" class="checkbox_handler" name="is_admin[]" value="0" />
<input type="checkbox" name="is_admin_ck[]" value="1" />

puis contrôlez le statut de modification de la case à cocher en dessous du code jQuery:

$(documen).on("change", "input[type='checkbox']", function() {
    var checkbox_val = ( this.checked ) ? 1 : 0;
    $(this).siblings('input.checkbox_handler').val(checkbox_val);
});

maintenant sur le changement d'une case à cocher, il va changer la valeur du champ caché associé. Et sur le serveur, vous ne pouvez rechercher que des champs cachés au lieu de cases à cocher.

J'espère que cela aidera quelqu'un à avoir ce type de problème. acclamer:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top