1

收到此消息:

Error: cannot call methods on checkboxradio prior to initialization; 
attempted to call method 'refresh'

我按照这里找到的演示:Ugly Mongrel

这是我的JS的一个片段:

function(){
  var $pbNum = $('<input checked="checked" id="component-pbnum-'+ _val+ 
        '" name="component-pbnum[]'+
        '" type="checkbox" value="'+ _val+ '" data-mini="true">'+
        '<label for="component-pbnum-'+ _val+ '">'+ _val+ '</label>'),
      $pbNumChk = $($pbNum[0]).on("change", function(ev){
        $pbNum.remove();
        // UNCAUGHT EXCEPTION: "cannot call methods on checkboxradio prior
        // to initialization; attempted to call method 'refresh'"
      });

  $pbnumList.controlgroup("container").append($pbNum);
  $pbNumChk.checkboxradio();
// Have also tried $pbNumChk.checkboxradio().checkboxradio("refresh") 
// as hinted by other answers. No difference.
}

我需要动态添加 checkboxradio (在这种情况下为复选框),但提供在单击/点击它们时将其删除的能力。

与 jQUI 相比,jQM 的局限性实际上有点令人沮丧。没有(记录)这些小部件的“销毁”方法?反正...

复选框添加到我的控制组就好了。当我在完整的浏览器中单击以删除它们时,它们会被删除,但会引发异常。到目前为止,我发现的所有内容都类似于以下内容: https ://stackoverflow.com/a/15180600/258598

这就是我要找的东西:http: //goo.gl/mVOdo

我不明白。为什么当我删除它时 JS 会抛出一个关于小部件的错误 - 特别是当它在插入时被初始化时?

[编辑]
修复了 $pbNum HTML 字符串中的一个小错字

4

1 回答 1

1

我浏览了 jQuery Mobile JS 文件,发现当change触发器时,jQM 向复选框添加/删除类,然后调用refresh方法.checkboxradio('refresh')来增强标记。

似乎.remove()发生在发生之前refresh,因此如果您将删除过程延迟 1 毫秒,refresh将在复选框被删除之前。

值得一提的是,这stopImmediatePropagation()无助于停止错误消息。

演示

代码

$(document).on('change', '.ui-checkbox', function () {
 var box = $(this);
 setTimeout(function () {
  box.remove();
   $('#group').controlgroup().trigger('create');
 }, 1);
});
于 2013-06-09T11:25:10.953 回答