我有一个id为“projectentryform--category”的HTMLselect,该选项(而不是select元素本身)的html是通过ajax提取的。
有了这个选择,我可以 console.log($('#project-entry-form--category'))
并获取jquery知道的关于它的所有信息。它显示了选项。因此,我知道jquery可以“看到”它们,因此应该能够在它们上设置所选的道具。我也可以 console.log($proj_data.cat_id)
并获取该类别所需的值。看起来我有所有的棋子,但它什么都没做。
我试过了
$('#project-entry-form--category').val($proj_data.cat_id);
和
$('#project-entry-form--category option[value="'+$proj_data.cat_id+'"]').prop('selected', 'selected').change();
和
$('#project-entry-form--category option[value="'+$proj_data.cat_id+'"]').prop('selected', true);
这些都不管用。
如果我尝试 console.log($('#project-entry-form--category').val());
我得到空值。因此jquery似乎没有看到select的初始值。我认为这只是因为select显示了第一个选项,但它不是“selected”
如果我这样做:
$('#project-entry-form--category').change( function () {
console.log($(this).val());
});
当我更改控制台时,会在控制台中获取值。因此,jquery同样可以在我试图设置值时“查看”选项值。它还表明我正确拼写了选择器,所以没有打字错误。
我被难住了!感谢您的帮助!
--编辑--
有人要求我做一个我正在尝试的片段。似乎我有一个问题,ajax选项及时到达那里,以便.val()更改它。
setTimeout(() => {
var $select_html =
'<option value="1" data-fold="Commercial">Commercial</option>'+
'<option value="3" data-fold="Ecclesiastical">Ecclesiastical</option>'+
'<option value="2" data-fold="Institutional - Educational">Institutional / Educational</option>'+
'<option value="4" data-fold="Municipal">Municipal</option>'+
'<option value="5" data-fold="Residential">Residential</option>'+
'<option value="6" data-fold="Secure Projects">Secure</option>';
$('#project-entry-form--category').html($select_html);
}, 500);
// Category ID received via AJAX - console.log() reveals the value is 5 (Residential)
var $proj_data = {'cat_id':5};
var $base = 'project-entry';
$('#' + $base + '-form--category').val($proj_data.cat_id);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<select class="form-select" id="project-entry-form--category" name="project-entry-form--category"></select>
1条答案
按热度按时间3yhwsihp1#
所以,因为很明显,这些选项没有及时出现在dom中
$('#project-entry-form--category').val($proj_data.cat_id);
为了设置它,我添加了一个参数$pre_select
对我ajax_get_select_options()
函数可选择在返回后设置select的值。可以使用相同的功能,而无需预先选择默认选项集。