web-dev-qa-db-fra.com

Javascript pour mettre à jour la case d'entrée dans un sous-formulaire Joomla

J'ai un sous-formulaire pouvant être répété, comportant un certain nombre de cases à cocher effectuées par les sélections effectuées dans un champ de liste faisant également partie du sous-formulaire.

J'ai ajouté une fonction onchange dans le champ de liste. Ainsi, quand il change, il déclenche ma petite fonction d'observation, qui ressemble à ceci:

// little script to check value and give notice
function watcherFunction(field) {
    // get the ID
    var id = jQuery(field).attr('id');
    // build the target array
    var target = id.split('__');
    // get value
    var value = jQuery(field).val();
    // set notice and do house cleaning
    if (2 == value) {
        // no database
        jQuery.UIkit.notify({message: Joomla.JText._('COM_COMPONENTBUILDER_ONLY_USE_THE_BNONE_DBB_OPTION_IF_YOU_ARE_PLANNING_ON_TARGETING_THIS_FIELD_WITH_JAVASCRIPTCUSTOM_PHP_TO_MOVE_ITS_VALUE_INTO_ANOTHER_FIELD_THAT_DOES_GET_SAVED_TO_THE_DATABASE'), timeout: 10000, status: 'warning', pos: 'top-center'});
        jQuery.UIkit.notify({message: Joomla.JText._('COM_COMPONENTBUILDER_THE_BNONE_DBB_OPTION_WILL_REMOVE_THIS_FIELD_FROM_BEING_SAVED_IN_THE_DATABASE'), timeout: 5000, status: 'primary', pos: 'top-center'});
        // do some house cleaning
        jQuery('#'+target[0]+'__'+target[1]+'__title').prop('checked', true);
        jQuery('#'+target[0]+'__'+target[1]+'__alias').prop('checked', false);
        jQuery('#'+target[0]+'__'+target[1]+'__sort').prop('checked', false);
        jQuery('#'+target[0]+'__'+target[1]+'__search').prop('checked', false);
        jQuery('#'+target[0]+'__'+target[1]+'__filter').prop('checked', false);
        jQuery('#'+target[0]+'__'+target[1]+'__link').prop('checked', false);
    } else if (1 == value) {
        // show in list view
        jQuery.UIkit.notify({message: Joomla.JText._('COM_COMPONENTBUILDER_THE_BSHOW_IN_LIST_VIEWB_OPTION_WILL_ADD_THIS_FIELD_TO_THE_ADMIN_LIST_VIEW'), timeout: 5000, status: 'primary', pos: 'top-center'});      
    } else {
        // do some house cleaning
        jQuery('#'+target[0]+'__'+target[1]+'__sort').prop('checked', false);
        jQuery('#'+target[0]+'__'+target[1]+'__filter').prop('checked', false);
        jQuery('#'+target[0]+'__'+target[1]+'__link').prop('checked', false);       
    }
}

L'idée est qu'il mette à jour un certain nombre de cases à cocher et envoie une notification à l'utilisateur si la valeur est 2 et 1.

Les avis sont envoyés, donc je sais que cela fonctionne, mais je ne parviens pas à faire fonctionner la mise à jour des cases à cocher.

Les cases à cocher HTML ressemblent à ceci:

<input name="jform[addfields][addfields1][title]" id="jform_addfields__addfields1__title" value="1" class="inputbox" aria-invalid="false" type="checkbox">

TOUTE AIDE SERA APPRÉCIÉE!!!

2
Llewellyn

Vous devez déclencher l'événement change après avoir modifié la valeur de la case à cocher. Vous pouvez le faire comme suit:

$(checkbox).prop("checked", true).trigger("change");

Plus à ce sujet ici:

https://forum.jquery.com/topic/should-chk-prop-checked-true-trigger-change-event

2
Hoeter