使用jqueryUI buttonset时,无论如何都要确定它是否已初始化?

leo*_*ora 6 jquery jquery-ui jqueryi-ui-buttonset

我有jQuery代码刷新按钮集:

$("#myRadio").buttonset('refresh');
Run Code Online (Sandbox Code Playgroud)

但我找到了一个用例,它在此行之前被调用:

$("#myRadio").buttonset();
Run Code Online (Sandbox Code Playgroud)

然后爆炸,因为它没有初始化.我想看看是否有办法确定这个buttonset()初始化是否已经发生,所以我可以在调用referh之前检查:

就像是:

if($("#myRadio").buttonsetIsInitialized())
{
    $("#myRadio").buttonset('refresh');
}
Run Code Online (Sandbox Code Playgroud)

检查的正确方法是什么?

Zak*_*rki 5

工作小提琴

您可以按照 OP 中描述的方式通过buttonsetIsInitialized()向 jQuery 对象添加新方法来完成此操作:

$.fn.buttonsetIsInitialized = function () {
    return this.hasClass('ui-buttonset');
};
Run Code Online (Sandbox Code Playgroud)

此方法将检查该类ui-buttonset(实例化添加到元素的)是否存在于元素类列表中。

if($("#myRadio").buttonsetIsInitialized()){
    $("#myRadio").buttonset('refresh');
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。

未初始化的情况:

$.fn.buttonsetIsInitialized = function () {
    return this.hasClass('ui-buttonset');
};
Run Code Online (Sandbox Code Playgroud)
if($("#myRadio").buttonsetIsInitialized()){
    $("#myRadio").buttonset('refresh');
}
Run Code Online (Sandbox Code Playgroud)

初始化案例:

$.fn.buttonsetIsInitialized = function () {
  return this.hasClass('ui-buttonset');
};

if( $("#myRadio").buttonsetIsInitialized() ){
  console.log('Refresh element');
}else{
  console.log('Not initialized');
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script>
<link href="https://code.jquery.com/ui/1.8.20/themes/base/jquery-ui.css" rel="stylesheet"/>


<div id="myRadio">
  <input id="first" type="radio" value="1" name="steps"/><label for="first">First</label>
  <input id="second" type="radio" value="2" name="steps"/><label for="second">Second</label>
</div>
Run Code Online (Sandbox Code Playgroud)