jquery-ui – 删除并重新应用元素上的小部件

我有一个问题.我在select元素上应用小部件.当我重新加载相同的select元素值时,我将删除select元素上的小部件并重新应用.但是,在同一元素上重新应用窗口小部件时,更改并未反映出来.

以下是HTML select语句:

<select id="countries" class="multiselect" multiple="multiple" name="countries">
        <option value="USA">United States</option>
        ...
</select>

要在同一元素上应用小部件:

function applyWidget(){ 
    $(".multiselect").multiselect();
}

一旦应用了小部件,它就会创建一个带有class =“.ui-multiselect”的div.

删除窗口小部件类:

function removeWidget(){
    $(".ui-multiselect").remove();
}

第一次调用applyWidget()方法工作正常.第二次打电话不起作用.如何在元素上重新加载小部件?

解决方法

首先,你的小部件需要有一个可用的destroy方法,你如何做到这取决于你是使用jQueryUI 1.8及以下版本还是jQueryUI 1.9及更高版本.

对于这些示例,我假设您使用以下代码引用multiselect div:

_create: function () {
    this.multiselect = $("<div>").addClass("ui-multiselect")...
}

如果您使用的是jQuery 1.8,那么您的小部件应该定义destroy:

destroy: function()
{
    this.multiselect.remove();
    $.Widget.prototype.destroy.call(this);
}

否则,在jQuery 1.9下,您需要定义_destroy:

_destroy: function () 
{
    this.multiselect.remove();
}

请注意,根据您的jQueryUI版本,您只包含上述两种方法中的一种,并且1.9版本前面带有下划线_.在jQueryUI 1.9下,不要在没有下划线的情况下定义destroy,因为widget工厂定义了该方法,你将覆盖(并破坏)该方法.

完成后,您需要更改代码,以便在重新创建窗口之前“销毁”窗口小部件.

function removeWidget(){
    $(".multiselect").multiselect("destroy");
}

相关文章

jQuery插件的种类 1、封装对象方法 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进...
扩展jQuery插件和方法的作用是非常强大的,它可以节省大量开发时间。 入门 编写一个jQuery插件开始于给...
最近项目中需要实现3D图片层叠旋转木马切换的效果,于是用到了jquery.roundabout.js。 兼容性如图: ht...
一、什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异...
AMD 模块 AMD(异步模块定义,Asynchronous Module Definition)格式总体的目标是为现在的开发者提供一...