jquery mobile不会标记收音机

时间:2013-12-11 21:41:51

标签: jquery-mobile

当我从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呼叫干扰的滞后有关。

2 个答案:

答案 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);

控制组不是“分组”仍然很奇怪,虽然如果我在此特定页面显示之前创建了无线电列表,它仍能正常工作。