Intereting Posts
Миниатюра Изображение, чтобы пойти в сообщении, а также add_submenu_page для отображения таблицы видео Как получить почтовую мета для пользовательских типов сообщений и таксономии Изменить категорию базы для пользовательских типов сообщений или сообщений Прикреплять изображения к сообщениям с помощью настраиваемых полей (только пути к уже загруженным изображениям) is_singular не будет вызывать мои функции? WP Query tax_query не возвращает сообщения Пользовательский пост в настраиваемом сообщении register_taxonomy с несколькими типами объектов и update_count_callback Как установить размеры эскизов сообщения (изображения с изображением) Проблема с wp_handle_upload Проблемы с перенаправлением сети Выберите событие, в котором дата начала меньше текущей даты, а дата окончания больше текущей даты Как получить блоги, принадлежащие пользователю? Удалите первое изображение, но только с определенного года

Как я могу вставлять опции в тег select внутри формы виджетов?

Я создал виджет, который извлекает имена файлов из базы данных, и теперь я пытаюсь вывести имена файлов как параметры в теге select внутри меню виджета администратора (функция формы в классе виджетов).

Вот как это выглядит на данный момент:

function form($instance) { ?> <script type="text/javascript"> jQuery(document).ready(function($){ var data = { 'action' : 'clc_return_imagefilenames' }; // send ajax request jQuery.post(ajaxurl, data, function(response) { // parse response and add slides retrievedImagenames = JSON.parse(response); for(var i = 0; i < retrievedImagenames.imagenamestoreturn.length; i++){ filename = retrievedImagenames.imagenamestoreturn[i]['filename']; jQuery("<?php echo $this->get_field_id( 'filenames' );?>").html('<option value="'+filename+'">'+filename+'</option>'); } }); }); </script> <select id="<?php echo $this->get_field_id( 'filenames' ); ?>" name="<?php echo $this->get_field_id( 'filenames' ); ?>" size="10" multiple="multiple" tabindex="1"></select> <?php 

План состоит в том, чтобы получить имена файлов через AJAX (работает, я его протестировал), а затем добавить их в тег select с помощью jQuery.

Проблема в том, что ничего не происходит … и это не проблема с сервером или AJAX, имя файла установлено, я могу увидеть возвращенные объекты JSON в консоли, и я могу даже выводить их с помощью jQuery. Но это не добавляет их в тег select, и я не знаю, почему.

Solutions Collecting From Web of "Как я могу вставлять опции в тег select внутри формы виджетов?"

Проблема заключается в вашем заявлении jQuery. Вы передаете get_field_id но без # он ищет tag not и id . Во-вторых, даже если это сработало, вы заменили бы содержимое только одним именем файла, используя html но вы должны добавить его в список, используя append .

Вот быстрый тест, чтобы выделить области.

 function form_test () { $field_id = 'test_xyz'; ?><select id="<?php echo $field_id; ?>" name="<?php echo $field_id; ?>" size="10" multiple="multiple" tabindex="1"></select> <script type="text/javascript"> jQuery(document).ready(function($){ var data = ['fileA', 'fileB', 'fileC']; for(var i = 0; i < data.length; i++){ var filename = data[i]; jQuery( "#<?php echo $field_id; ?>").append('<option value="'+filename+'">'+filename+'</option>'); } }); </script><?php } add_filter ('the_content', function($content){ return $content.form_test(); }); 

Ваш код будет больше похож на

 function form ($instance) { $field_id = $this->get_field_id( 'filenames' ); ?><select id="<?php echo $field_id; ?>" name="<?php echo $field_id; ?>" size="10" multiple="multiple" tabindex="1"></select> <script type="text/javascript"> jQuery(document).ready(function($){ var data = { 'action' : 'clc_return_imagefilenames' }; // send ajax request jQuery.post(ajaxurl, data, function(response) { // parse response and add slides var retrievedImagenames = JSON.parse(response); for(var i = 0; i < retrievedImagenames.imagenamestoreturn.length; i++){ var filename = retrievedImagenames.imagenamestoreturn[i]['filename']; jQuery( "#<?php echo $field_id; ?>").append('<option value="'+filename+'">'+filename+'</option>'); } }); }); </script><?php }