Intereting Posts
Пользовательские поля в столбце, которые позже используются в цикле Добавление поля пользовательского идентификатора в категории Почему обновление профиля пользователя создает дополнительные возможности PHP работает на CMS стороне WordPress удалить базовый слизень из иерархического пользовательского типа сообщения Как программно установить роль по умолчанию для новых пользователей? Как изменить права доступа на многие страницы? add_theme_support с помощью плагина Удалить изображения галереи из-за отсутствия товаров woocommerce Как перенаправить все запросы на страницу на страницу «прощай»? Как установить поля сайта с моей темой? WordPress Loop: Список всех сообщений категории и подкатегории Поместить содержимое внутри столбца Есть ли способ добавить больше тегов в облако тегов? Получение элемента темы в редакторе страниц плагинов в wp admin

Отображение метабокса через JQuery Checkbox

Я обманывал себя как с JQuery, так и с PHP, и я пытаюсь настроить сайт для спортивной команды. Я создал настраиваемый тип сообщений под названием «Матчи», и там я создал два пользовательских мета-поля. Один для деталей матча (домашняя и гостевая команда IE) и одна для статистики матча (цели, кадры и т. Д.). В настоящее время у меня есть флажок (Is This Game Complete), который показывает / скрывает параметры статистики (которые находятся в Div #meta_box_stats) в Подробности метаданных (#dw_match_details).

Значение данных флажка сохраняется, но оно работает неправильно. Если он установлен как завершенный при загрузке для редактирования, и для значения установлено значение «включено», он все равно не покажет метатег статистики при попытке отредактировать сообщение, я должен щелкнуть его и снова щелкнуть по нему. Вот мой код (как можно более краткий, потому что это происходит много).

Это работает, поскольку я проверил var_dump при проверке, и он изменяется соответственно на включение или выключение, и либо показывает чек, либо нет.

Я хочу, чтобы статистика была скрыта до тех пор, пока не будет введена игра. После того, как он был введен и проверен как полный, он всегда должен показывать, когда вы редактируете страницу … Я просто не могу понять, почему это не так.

Вот мой сценарий

<script type="text/javascript"> jQuery(document).ready(function($) { $("#dw_match_stats").hide(); $('#dw_match_details').on('change', '#dw_complete', function() { played = $(this).prop('checked'); if (played) { $('#dw_match_stats').show(); } else { $('#dw_match_stats').hide(); } }); $('#dw_match_stats').change(); }); </script> 

Как упоминалось, значение пользовательских данных «dw_complete» сохраняется и изменяется должным образом.

EDIT: Вот некоторые из оставшегося кода. Я создал два мета-поля, один из которых называется #dw_match_details, у которого есть выбор команды и флажок, завершена ли игра.

 <div id="dw_match_details" class="postbox "> <div class="handlediv" title="Click to toggle"><br></div><h3 class="hndle"><span>Match Details</span></h3> <div class="inside"> <?php $values = get_post_custom( $post->ID ); $check = $values['dw_complete'][0]; ?> <input type="checkbox" id="dw_complete" name="dw_complete" <?php checked( $check, 'on', true ); ?> /> <label for="dw_complete">Is This Game Complete?</label> 

Тогда у меня есть статистика метаболизма.

 <div id="dw_match_display" class="postbox"> <div class="inside"> <div id="dw_game_stats" class="tabs-panel"> <div width="50%" style="float:left;margin-right:10%;"> <strong>Goals Per Period:</strong> <table> <thead> <tr> <th>&nbsp;</th> <th>1st</th> <th>2nd</th> <th>3rd</th> <th>OT</th> <th>Total</th> </tr> </thead> </table> </div> 

В этом суть, я, очевидно, имею больше информации для раздела статистики, но думаю, что это должно быть неуместно. Если вам нужно, чтобы я опубликовал сообщение, которое я могу или я положил в PasteBin. Прежде чем я забуду, вот два вызова для создания мета-боксов.

 function dw_custom_meta_boxes_match() { add_meta_box( 'dw_match_details', 'Match Details', 'dw_match_details', 'dw_match', 'normal', 'high' ); add_meta_box('dw_match_display', 'Match Statistics', 'dw_match_display', 'dw_match', 'normal', 'low' ); 

Solutions Collecting From Web of "Отображение метабокса через JQuery Checkbox"

Нашел решение, хотя, довольно просто

 <script type="text/javascript"> jQuery(document).ready(function($) { var dw_match_display = $('#dw_match_display'); dw_match_display.hide(); if ($('#dw_complete').prop('checked') ) { dw_match_display.show(); } $( '#dw_match_details' ).on( 'change', '#dw_complete', function() { dw_match_display.hide(); if ( $(this).prop('checked') ) { dw_match_display.show(); } }); }); jQuery(document).ready(function($) { $( '#dw_match_display' ).change(); }); </script> 

Я упростил ваш код, удалив материал WordPress и удалив часть вашей разметки. Я обнаружил, что все еще не запускал событие change пока не сделал это так:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US"> <head profile="http://gmpg.org/xfn/11"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Testing jQuery</title> <script type='text/javascript' src="http://code.jquery.com/jquery-1.9.1.js"></script> <script type="text/javascript"> jQuery(document).ready(function($) { $( '#dw_match_display' ).on( 'change', '#dw_complete', function() { $( '#dw_match_details' ).hide(); // These 2 lines should be removed in production. var change_status = $(this).prop('checked') ? 'shown' : 'hidden'; alert( "In Change Event\n\n Match Display will be " + change_status + '.' ); if ( $(this).prop('checked') ) { $( '#dw_match_details' ).show(); } }); }); jQuery(document).ready(function($) { $( '#dw_complete' ).change(); }); </script> </head> <body> <div id="dw_match_display" class="postbox "> <input type="checkbox" id="dw_complete" name="dw_complete" checked="checked" /> <label for="dw_complete"> Show Match Details</label> <div id="dw_match_details" class="postbox"> [This data should be seen when the page loads.] </div><!-- end #dw_match_details --> </div><!-- end #dw_match_display --> </body> </html> 

Я добавил окно предупреждения, чтобы вы могли видеть, что событие change запускается при загрузке страницы. Я не знаю, почему работает второй вызов jQuery(document).ready . Я только пробовал это на жаворонке. 🙂

Это проверяет страницу, когда установлен флажок. Чтобы проверить страницу, когда флажок не установлен, измените эту строку:

 <input type="checkbox" id="dw_complete" name="dw_complete" checked="checked" /> 

К этому:

 <input type="checkbox" id="dw_complete" name="dw_complete" /> 

Итак, попробуйте изменить код jQuery на это:

 jQuery(document).ready(function($) { $('#dw_match_details').on('change', '#dw_complete', function() { played = $(this).prop('checked'); if (played) { $('#dw_match_stats').show(); } else { $('#dw_match_stats').hide(); } }); }); jQuery(document).ready(function($) { $('#dw_match_stats').change(); });