サブフォームの一部であるリストフィールドで行われた選択によって影響を受ける多数のチェックボックスを持つ、繰り返し可能なサブフォームがあります。
リストフィールドに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">
どんな助けでも素晴らしいでしょう!!!
チェックボックスの値を変更した後、change
イベントをトリガーする必要があります。これは次のようにして行うことができます。
$(checkbox).prop("checked", true).trigger("change");
これについての詳細はこちら:
https://forum.jquery.com/topic/should-chk-prop-checked-true-trigger-change-event