web-dev-qa-db-ja.com

Joomlaサブフォームの入力チェックボックスを更新するJavaScript

サブフォームの一部であるリストフィールドで行われた選択によって影響を受ける多数のチェックボックスを持つ、繰り返し可能なサブフォームがあります。

リストフィールドにonchange関数を追加したので、それが変更されると、次のような小さな監視関数がトリガーされます。

// 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);       
    }
}

アイデアは、複数のチェックボックスを更新し、値が2と1の場合にユーザーに通知を送信することです。

通知が送信されるので、動作することがわかりますただし、チェックボックスの更新を機能させることができません

チェックボックスHTMLは次のようになります。

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

どんな助けでも素晴らしいでしょう!!!

2
Llewellyn

チェックボックスの値を変更した後、changeイベントをトリガーする必要があります。これは次のようにして行うことができます。

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

これについての詳細はこちら:

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

2
Hoeter