Lorsque l'on place une case à cocher avec la propriété "Sélection" cochée dans une table liste alors la sélection est obligatoirement en multi-sélection.

Par exemple :

<table cols="2" id="TBL_1" width="75%" border="1" cellpadding="1" cellspacing="1">
<tbody><adelia:tablelist name="TBL_1">
<tr>
<td><adelia:checkbox type="BOOL" selection="true"><input type="checkbox" name="_FLAGSEL" id="_FLAGSEL" /></adelia:checkbox></td>
<td><adelia:outputfield name="CHO_1" type="NB2" refc="false"/></td>
</tr>
</adelia:tablelist></tbody>
</table>

Pour simuler la mono-sélection, il faut passer par une fonction Javascript :

<table cols="2" id="TBL_1" width="75%" border="1" cellpadding="1" cellspacing="1">
<tbody><adelia:tablelist name="TBL_1">
<tr>
<td><adelia:checkbox type="BOOL" selection="true"><input type="checkbox" name="_FLAGSEL" id="_FLAGSEL" onclick="return checkOnlyOne(this, 'TBL_1', 'ID_WPAGE1', 'TBL_1', true)"/></adelia:checkbox></td>
<td><adelia:outputfield name="CHO_1" type="NB2" refc="false"/></td>
</tr>
</adelia:tablelist></tbody>
</table>

Voici la définition de la fonction checkOnlyOne :

 

<script>
//<![CDATA[
// Fonction qui permet de ne cocher qu'une case à cocher à la fois.
// idTable : Valeur de l'attribut id du tag TABLE si la case à cocher est contenue dans une table. Passer null sinon.
// adeliaPageName : Nom de la page Adelia
// adeliaListName : Nom de la table liste (adelia:tablelist) ou liste (adelia:b_list) Adelia
// zeroOrOne : true si on veut aucune ou une case à cocher cochée; false sinon (à la manière d'une liste de bouton radio : si une case à cocher est cochée alors on ne peut pas retourner dans l'état aucune case à cocher cochée)
function checkOnlyOne(objCheckbox, idTable, adeliaPageName, adeliaListName, zeroOrOne)
{
var tabInput = idTable != null ? document.getElementById(idTable).getElementsByTagName('input') : document.getElementsByTagName('input');
var i, lgTabInput = tabInput.length, objInput, objCheckboxChecked = null;
var checkboxPrefix = ':lst:' + adeliaPageName + ':' + adeliaListName + ':_FLAGSEL:';
// Recherche d'une case a cocher cochée dans la table liste 
for (i = 0; i < lgTabInput; i++)
{
objInput = tabInput[i];
if (objInput != objCheckbox && objInput.getAttribute('type') == 'checkbox' && objInput.checked && objInput.name && objInput.name.indexOf(checkboxPrefix) == 0)
{
objCheckboxChecked = objInput;
break;
}
}
if (objCheckboxChecked)
{
if (objCheckbox.checked)
{
// l'utilisateur tente de cocher
// on decoche l'ancienne case a cocher
objCheckboxChecked.checked = false;
}
else
{
// l'utilisateur tente de decocher
if (! zeroOrOne)
// on interdit le decochage
return false;
}
}
else
{
// l'utilisateur tente de decocher
if (! objCheckbox.checked && ! zeroOrOne)
// on interdit le decochage
return false;
}
return true;
}
//]]>
</script>

 

Articles connexes