2

在页面上,当用户填写搜索框时,我添加了一个搜索结果 div,其中包含使用 jQuery 克隆的行 (withDataAndEvents = true)。其中一些行包含表单元素和一些 jQuery UI 滑块。这些元素的事件与 knockoutJS 的数据绑定功能绑定。常规表单元素上的事件处理程序工作正常,但不适用于 jQuery UI 滑块。拖动手柄时,它会跳回原始行。

一些代码:

$(divselector).each(function (i, div) {
     if (arrPropertyGuids.indexOf($(div).attr("data-propertyguid")) == -1) {
         $("#propertiesSearchPanel").append($(div).clone(true).show());
     }
 });

我遍历一些 div(行)并通过克隆它们将它们一一添加到结果面板中(也尝试过没有区别的深度克隆)。一些 div 隐藏在源代码中,所以我需要调用 .show()。

我所做的尝试:

  • 试图重新初始化滑块。但没有检测到不同的行为。
  • 尝试在克隆后销毁和初始化滑块,但这会产生错误:

无法在初始化之前调用滑块上的方法;试图调用方法“销毁”

 $(".range-slider").slider("destroy");

所以,在我看来,以某种方式,克隆的滑块不是“真正的”jQuery UI 滑块,但仍与原始元素相关联。

任何人都知道如何解决这个问题?

4

1 回答 1

0

我有一个可行的解决方案,但不是一个理想的解决方案。所以我把这个问题留着,以防有人可能有更好的答案。

我只是删除了所有滑块,然后重新添加了 div 标签。之后,我重新应用了 jQuery UI 滑块初始化函数。

 $("#propertiesSearchPanel").find(".range-slider").remove();
        $("#propertiesSearchPanel .range-box").each(function (i, tb) {
           $(tb).next("label").after('<div class="range-slider"></div>');
        }
 });
 sliders($("#propertiesSearchPanel")); //init functions for sliders
于 2013-05-03T09:49:06.017 回答