【问题标题】:jQuery UI resizable does not work on dynamic elements可调整大小的 jQuery UI 不适用于动态元素
【发布时间】:2018-03-14 05:30:57
【问题描述】:

我通过管理仪表板在我的数据库中存储了一些resizabledraggable div 标签,并将它们输出到我的主网站上。但问题是,resizable 不起作用,但我设法使 draggable 起作用。

这是来自数据库的 DOM:

<div data-type="input" data-card="serial_no" data-title="Serial No" class="card-data card-text card-content serial_no serial_no_content ui-draggable ui-draggable-handle ui-resizable"><span>Content for Serial No</span>
  <div class="ui-resizable-handle ui-resizable-n" style="z-index: 90;"></div>
  <div class="ui-resizable-handle ui-resizable-e" style="z-index: 90;"></div>
  <div class="ui-resizable-handle ui-resizable-s" style="z-index: 90;"></div>
  <div class="ui-resizable-handle ui-resizable-w" style="z-index: 90;"></div>
</div>

注意:我将 DOM 包裹在一个 div 标记中,其类为 .card

您可以看到 ui-resizable-handleui-resizable-* 类已经存在,我在将 DOM 输出到类名为 .card 的包装器中后尝试了以下操作。

$(function(){

   /**
    * Searching for .card children with the class name .ui-resizable-handle
    * and removing them
    **/
   $('.card').find('.ui-resizable-handle').each(function(i, v){
      $(v).remove();
   });


   /**
    * Iterating through .card again and making it's children draggable and resizable but this does not work.
    **/
   $('.card').children().each(function(i, v){
      if($(v).attr('data-type') == 'input'){
        $(v).draggable({containment: '.card-wrapper'}).resizable({
          handles: "n, e, s, w"
        });
      }
   });
});

执行此操作后,draggable 有效,但 resizable 无效。

请帮我解决这个问题。

提前致谢。

编辑: 这是Fiddle

【问题讨论】:

  • 如果您可以通过 jsfiddle(或等效的)或 sn-p 制作一个有效的示例会有所帮助。
  • 你的v是动态元素吗?
  • 是的@AnandG。我正在使用 jQuery $.each 迭代器来遍历 .card 的所有子元素,这些子元素显然是resizable
  • 你检查v元素有draggable 类吗?
  • @AnandG 不是 draggable 而是 ui-draggableui-draggable-handle

标签: javascript jquery html css jquery-ui


【解决方案1】:

我觉得奇怪的两件事,

  1. 您正在删除子元素,然后尝试添加 resizable on 相同的。
  2. 您正在同时绑定draggableresizable。 它不起作用,因为 draggable 的返回不是 元素的一个实例。

我已尝试在下面解决您的问题

$(function() {

  /**
   * Iterating through .card again and making it's children draggable and resizable but this does not work.
   **/
  $('.card').children().each(function(i, v) {
    if ($(v).attr('data-type') == 'input') {
      $(v).resizable({
        handles: "n, e, s, w"
      });
      $(v).draggable({
        containment: '.card-wrapper'
      })
    }
  });
});
.card {
  outline: solid 1px #aaa;
  position: absolute;
  margin: auto;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
}

.card .card-text {
  position: absolute;
  left: 32%;
  border: solid 1px red;
}
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.min.js"></script>

<!-- div with the class .card is not dynamic but it's content is which is coming from database and i'm using PHP & MySQL for backend -->
<div class="card">
  <div data-type="input" data-card="serial_no" data-title="Serial No" class="card-data card-text card-content serial_no serial_no_content ui-draggable ui-draggable-handle ui-resizable"><span>Content for Serial No</span>
    <div class="ui-resizable-handle ui-resizable-n">foo</div>
    <div class="ui-resizable-handle ui-resizable-e">too</div>
    <div class="ui-resizable-handle ui-resizable-s">poo</div>
    <div class="ui-resizable-handle ui-resizable-w">choo</div>
  </div>
</div>

希望这会有所帮助。

【讨论】:

  • 您的解决方案不起作用。基本上,制作元素resizabledraggable 做了两件事。 1 - 将ui-draggable ui-draggable-handle ui-resizable 类添加到目标元素。 2 - resizable 附加 N 个 div 标签(取决于指定的句柄数)。因此,在不删除附加的 div 标签的情况下,包含类名 ui-resizable-handle 并重新附加 draggableresizable 会复制具有类名 ui-resizable-handle 的子 div 标签,这就是我首先删除它们的原因。
  • 尝试将 DOM 存储在包含 resizabledraggable div 标签的数据库中,并尝试使用 jQuery 再次使其成为 resizable,但它不会工作。
  • 那天我设法修复了它。奇怪的是,它以前在没有 jQuery ui css 的情况下也可以工作,只要我将历史记录存储在 localStorage 中,它仍然可以工作。但是当我试图显示来自数据库的 dom 并使用 jquery ui 主题样式表修复它时,问题就出现了。
  • 这是我的Fiddle,那天我自己修好了,忘了分享
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多