如何用jQuery获取动态生成的select选中值?当前仅能获取默认值
解决动态生成Select无法获取选中值的问题
我来帮你排查这个问题,核心问题出在重复的ID设置和错误的选中值获取逻辑上,咱们一步步来修正:
问题1:重复的ID导致选择器失效
你在PHP循环里给每个<option>都加了id='tstSelected',但页面内的ID必须是唯一的——浏览器只会识别第一个带这个ID的元素,这就是你永远拿到默认值的根本原因。
应该把ID绑定到<select>标签上,而不是每个选项:
if($(this).hasClass('fa-pencil')){ $.each(currentTD, function () { if($(this).hasClass('editable')){ if($(this).hasClass('getFromSelect')){ // 把ID移到select上,option去掉重复ID $(this).html("<select id='tstSelected'>" + "<?php foreach($test as $tst){ echo "<option value='$tst->tst_idx'>". $tst->tst_desc . $tst->tst_idx ."</option>"; } ?>" + "</select>"); } $(this).prop('contenteditable', true); } }); $(this).removeClass('fa-pencil').addClass('fa-check') editing = true; }
问题2:简化选中值的获取逻辑
获取select选中值不需要遍历option,直接调用select的val()方法就可以拿到选中option的value;如果需要文本,再用option:selected筛选:
// 获取选中值(推荐写法) var selectedValue = $('#tstSelected').val(); // 获取选中的文本 var selectedText = $('#tstSelected option:selected').text();
额外提醒:多动态Select的场景
如果页面里有多个可编辑单元格(会生成多个select),那tstSelected这个ID还是会重复,建议改用类名代替ID:
// 生成时用类名 $(this).html("<select class='tstSelected'>" + "...option代码..." + "</select>"); // 获取时根据上下文定位(比如当前编辑的行) var selectedValue = $(this).closest('tr').find('.tstSelected').val();
动态元素的事件监听(可选)
如果需要实时监听选中变化,因为是动态生成的元素,要使用事件委托:
$(document).on('change', '.tstSelected', function(){ console.log("当前选中值:", $(this).val()); });
内容的提问来源于stack exchange,提问作者Tali
相关产品推荐
相关产品推荐

