当我从API调用函数中动态插入单选按钮时,生成的按钮在单击它们时不会被标记为“已选中”,这意味着它们无法正常工作。它们获得“ui-radio-on”类,但不是checked属性,这意味着.change()事件也不会触发。为什么呢?
// Show places list
user.getConnections("worksat", function(error, data, connections){
for(var i = 0; i < connections.length; i++) {
var connection = connections[i];
var place = connection.name;
// Add place where person works at to list
$('#radio-clock-in').append('<label><input type="radio" name="clock-place" id="clock-' + place + '" value="' + place + '" />' + place + '</label>');
}
// refresh radio buttons
$('input[type=radio]').checkboxradio();
});
//If I put the same .append() code right here, the button will behave normally
此外,按钮样式正确,但不承认它们在控制组内,所以它们分散而不是整齐地打包。
<div data-role="panel" id="places">
<fieldset data-role="controlgroup" id="radio-clock-in">
<!-- Dynamically injected radio buttons go here -->
</fieldset>
</div>
jquery mobile v1.4.0-rc1
*更新:只是想注意,如果我在user.getConnections函数之外放置完全相同的代码,则按钮工作(attr得到检查)并触发.change()事件。我认为这与api呼叫干扰的滞后有关。
答案 0 :(得分:2)
将事件附加到动态创建的单选按钮:
$("static_parent").on("change", "dynamic_element", function () {
// code
});
您可以将其放在 user.getConnections 功能之外。
要使复选框/广播正常工作,您需要为每个人提供唯一ID,并将for=id
添加到标签标记。
<label for="unique_id"><input type="radio" name="clock-place" id="unique_id" value="" />Place</label>
另外请注意,元素应附加到.controlgroup("container")
。
$('#radio-clock-in').controlgroup("container").append(elements);
然后,刷新控制组。
$('#radio-clock-in').controlgroup("refresh");
<强> Demo 强>
答案 1 :(得分:0)
结果我只需要在user.getConnections函数中移动我的事件监听器:
$('[name=clock-place]').change(clockIn);
控制组不是“分组”仍然很奇怪,虽然如果我在此特定页面显示之前创建了无线电列表,它仍能正常工作。