【问题标题】:jQuery: Moving element to another element and back again renders the element unclickablejQuery:将元素移动到另一个元素并再次返回会使元素不可点击
【发布时间】:2013-10-22 20:13:33
【问题描述】:

在我的脚本中,我试图将一个元素(列表)从一个父级(只是文本)移动到另一个父级,然后再返回(到列表)。问题是当我将元素移回原始父级(ul)时,它变得不可点击。我认为在 remove() 上使用 detach() 可能会奏效,但并没有什么不同。

$(document).ready(function() {
  $("#inventoryWeapon li").click(function(event) { 
    var clickedId = event.target.id;
    if ($("td#weapon").is(":empty")) {
      $("td#weapon").text(clickedId); 
      $(this).detach(); 
    }
  });
  $("td#weapon").click(function(event) { 
    var unequipping = $(this).text();
    $("#inventoryWeapon").append("<li id='" + unequipping + "'>" + unequipping + "</li>"); 
    $(this).detach();
  });
});

【问题讨论】:

  • 您不是在移动元素,而是在创建一个新元素。
  • 事件委托将大大简化此代码。
  • 与其移动元素,不如直接隐藏和显示它们?
  • @Barmar,我希望将一个元素的内容更改为另一个元素。不过,这确实给了我一些想法。

标签: javascript jquery


【解决方案1】:

正如上面流行评论中所建议的,您没有移动元素。要移动它,请执行此操作。

$("td#weapon").click(function(event) {
    $(this).appendTo($("#inventoryWeapon"));
});

【讨论】:

  • 我完全错过了。谢谢!使用这个解决方案,我还注意到我正在从它的表中拉出“td”元素并将其推回到“li”元素中,这导致“#inventoryWeapon li”的重新恢复元素不可点击。我赞成这个解决方案,但我比这个能力差了几分。
【解决方案2】:

您不是在移动元素,而是在一个函数中删除该元素,并在另一个函数中创建一个具有相同 ID 和内容的新元素。但原来的事件处理程序只绑定到原来的元素。

如果您希望事件处理程序处理动态创建的元素,请使用事件委托:

$("#inventoryWeapon").on("click", "li", function(event) {
    ...
});

或者,您可以在分离元素时保存它,而不是重新创建它:

var savedLI;
$("#inventoryWeapon li").click(function() {
    if ($("td#weapon").is(":empty")) {
        savedLI = $(this).detach();
        $("td#weapon").text(this.id);
    }
});
$("td#weapon").click(function() {
    if (savedLI) {
        $("#inventoryWeapon").append(savedLI);
        $(this).detach();
    }
});

【讨论】:

  • 嗯,我以后可能会用这个花絮做其他事情。谢谢!
猜你喜欢
  • 2015-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-05
  • 2016-06-08
  • 2010-11-19
  • 2016-12-19
相关资源
最近更新 更多