Question

Je suis en train d'utiliser tout sélectionner case à cocher pour sélectionner une colonne de cases à cocher.

J'ai donc donné tous ceux que je veux cochés à la fois le même nom ABoxesElement pour que je puisse facilement vérifier tous dans javascript.

Cependant, lorsque j'utilise Firebug dans Firefox, je peux voir que les cases ne gardaient pas le nom que je leur ai donné, mais avant le nom du composant suspendu et joint un numéro d'auto-incrémentée à mes cases à cocher.

Puisque je ne peux pas utiliser regex dans getElementByName comment puis-je aller sur le réglage de la même valeur dans plusieurs cases à cocher. (ID est utilisé pour autre chose) .. voici mon code:

Sélectionner tout Checkbox

<dmf:checkbox
name="ABoxes"
onclick = 'selectAllACheckBoxes'
id="allABoxes"  
runatclient="true"/>

Exemple d'une des cases à cocher que je veux vérifié

<dmf:checkbox  
name="ABoxesElement" 
id="<%=...%>" 
runatclient="true"/>

**** Exemple de Javascript ****

function selectAllCheckBoxes(source) {
var checked = source.checked 
var cbName = source.name + 'Element';  
var col = document.getElementsByName(cbName);

for (var i=0; i<col.length;i++) 
{
col[i].checked = checked;
col[i].disabled = !checked;                         
} 
}       

Lorsque la page rend cependant je remarque que le nom des cases individuelles est pas ABoxesElement , mais quelque chose comme component_nameAboxesElement_2 afin que le script ne fonctionnera pas à moins que getElementsByName peut accepter regexes .

Toutes les idées sur la façon de contourner cela?

la case à cocher pour tld a un autre attribut

  <attribute>
     <name>datafield</name>
     <required>false</required>
     <rtexprvalue>true</rtexprvalue>   </attribute>

peut l'utiliser pour stocker le « nom », puis accéder à l'élément à travers elle?

Modifier le code HTML pour une case à cocher SORTIE individuelle

<input type="hidden" value="true" id="a1ON_hidden" name="mform_content_AboxesElement_hidden_2"/>
    <input type="checkbox" onclick="setKeys(event);safeCall(selectAllCheckBoxes,this);" value="" title="Click here" id="a1ON" name="form_content_AboxesElement_2"/>

EDIT 2 HTML sortie pour une case à cocher selectAll

<input type="hidden" name="mform_content_ABoxes_hidden_1" id="allABoxes_hidden" value="true"/>
<input type="checkbox" name="mform_content_ABoxes_1" id="marketsAll" title="Click to select" value="" onclick="setKeys(event);safeCall(selectAllCheckBoxes,this);"/>
Était-ce utile?

La solution

Voici un coup d'envoi:

function selectAllCheckboxes(checkboxElement) {
    var allFormElements = checkboxElement.form.elements;
    for (var i = 0; i < allFormElements.length; i++) {
        var formElement = allFormElements[i];
        if (formElement.name.indexOf('mform_content_ABoxes_') == 0) { // Check if its name starts with particular string.
            formElement.checked = checkboxElement.checked;
        }
    }
}

Vous pouvez éventuellement passer le 'mform_content_ABoxes_' dans un autre argument de fonction, ou même extraire à partir checkboxElement.name si vous connaissez les modèles utilisés pour générer l'attribut name.

Autres conseils

L'attribut datafield est utilisé pour fournir une propriété d'objet (comme r_object_id, r_version_label etc.) sous forme de données au contrôle, ce qui aidera pas beaucoup dans ce cas.

Une solution pas si parfaite pourrait être de mettre runatclient="false" dans votre balise de référence et dmf les cases à cocher par des noms différents dans le composant correspondant; alors au lieu de javascript vous pouvez utiliser une méthode java dans la classe de composant pour obtenir une poignée sur les cases à cocher et modifier leurs valeurs. L'attribut name généré WDK pour les cases à cocher dépend du nom du composant et probablement leur ordre dans la JSP, donc je ne suis pas sûr si une bonne idée de supposer que WDK toujours générer les mêmes noms pour les cases à cocher. Cependant le traitement dans la classe de composants sera toujours plus lent que d'une fonction javascript.

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