我有一个简单的选择菜单:
<select id="ind">
<option id="a">Parent A</option>
<option id="b">Parent B</option>
<option id="c">Parent C</option>
</select>
<div id="buttons">
</div>
我正在使用一组数据来创建一些动态按钮。目标是通过使用按钮本身的select
,每个按钮都能够触发id
菜单中的更改。为此,我正在使用事件委托。
var data = ["a", "b", "c"];
function changeValue() {
$("#ind").val(this.id).trigger("change");
}
for (var i = 0; i < data.length; i++) {
$('#buttons').append("<button class='btnParent' type='button' id='"
+ data[i] + "'>" + data[i] + "</button>");
}
$("#buttons").on("click", ".btnParent", changeValue);
但是,当我单击按钮时,传递给选择的值为null
,因此没有任何实际发生。
我认为我正在按预期使用委托(希望如此)。是否有任何修复或替代方案?
修改:忘记添加JSFiddle
答案 0 :(得分:4)
您需要将value
属性设置为option
而不是id
。
<select id="ind">
<option value="a">Parent A</option>
<!---- ^^^^^^ ------------------->
<option value="b">Parent B</option>
<!---- ^^^^^^ ------------------->
<option value="c">Parent C</option>
<!---- ^^^^^^ ------------------->
</select>
var data = ["a", "b", "c"];
function changeValue() {
$("#ind").val(this.id).trigger("change");
}
for (var i = 0; i < data.length; i++) {
$('#buttons').append("<button class='btnParent' type='button' id='" + data[i] + "'>" + data[i] + "</button>");
}
$("#buttons").on("click", ".btnParent", changeValue);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="ind">
<option value="a">Parent A</option>
<option value="b">Parent B</option>
<option value="c">Parent C</option>
</select>
<div id="buttons">
</div>