动态添加的复选框/单选按钮/评分元素不会触发语义ui中的附加事件。下面是示例的js小提琴,当选中复选框时,它并非全部触发事件,我也分别尝试了“设置”选项和onChange。没有任何工作按预期进行。
Javascript:
$("#cbdiv").checkbox('setting', 'onChange', function() {
alert("Changed");
});
$("#addcheckboxes").unbind();
var chkcounter = 0;
$("#addcheckboxes").bind('click', function() {
$('#chkgrp').append("<div id='chkbx_'" + chkcounter + "class='ui checkbox'><input type='checkbox' ></div>");
$('#chkbx_' + chkcounter).checkbox({
onChange: function() {
alert('i am added. my id is : ' + $(this).attr('id'));
}
});
});
HTML
<div class="field">
<div id="cbdiv" class="ui toggle checkbox">
<input type="checkbox" id="confirm" name="confirmed">
<label>Confirmed</label>
</div>
<div>
<button id="addcheckboxes">Add checkboxes</button>
<div id="chkgrp">
</div>
</div>
</div>
Jsfiddle sample
最佳答案
这是因为append语句添加了错误的id
元素。执行append语句后,如果您查看html,则如下所示。
<div id="chkgrp">
<div id="chkbx_" 0class="ui checkbox">
<input type="checkbox">
</div>
</div>
执行上述代码后,您正在通过jquery搜索id
chkbx_0
,并尝试为其添加onChange事件。所以失败了。像下面这样更新您的append元素语法,它将起作用。 $('#chkgrp').append("<div id='chkbx_" + chkcounter + "' class='ui checkbox'><input type='checkbox' ></div>");
在上面的代码中,我在添加chkcounter
id
之后关闭了id='chkbx_" + chkcounter + "'
字符串。在您先前的代码中,在添加chkcounter本身id
之前,您已经关闭了id='chkbx_'" + chkcounter + "
字符串。更新
看起来您的
semantic
css具有以下样式。 .ui.checkbox input {
position: absolute;
top: 0px;
left: 0px;
opacity: 0;
outline: 0px;
}
由于上述样式,您无法看到该复选框。如果要查看样式化的复选框,则已将
label
添加到复选框并按如下所示更新代码。 $('#chkgrp').append("<div id='chkbx_" + chkcounter + "' class='ui checkbox'><input type='checkbox'><label>test</label></div>");
我也注意到您正在尝试使用
$(this).attr('id')
获取元素的ID。该语句将给出输出undefined
,因为该复选框没有名为id
的任何属性。希望您尝试获取ID chkbx_0
。在这种情况下,您必须像下面一样添加代码。 $(this).parent().attr('id');
我已经通过上述所有更改更新了您的小提琴,您可以观看演示here.