【问题标题】:Why only one jquery delegate() is work?为什么只有一个 jquery delegate() 有效?
【发布时间】:2016-07-05 09:50:22
【问题描述】:

我对 jquery delegate() 有疑问。 这是一种用于添加新测试问题和答案的表格。但不幸的是,delegate() 不适用于生成的答案输入。添加新问题效果很好,但在生成的答案中不行。

$(".questions").delegate(".qadd", "click", function() {
    $(".questions").after("<div class='newq'><br><div><input placeholder='Question' type='text'/><a class='qdel' href='#'>-</a></div><div class='answers'><input placeholder='Answer' type='text'/><a class='ansadd' href='#'>+</a><label class='richtig'><input type='checkbox' name='checkbox' value='Richtig'>True</label></div></div>");

    $(".qdel").click(function() {
        $(this).closest(".newq").remove();
    });

});

$(".answers").delegate(".ansadd", "click", function() {
    $(".answers").first().after("<div class='newa'><input placeholder='Answer' type='text'/><a class='adel' href='#'>-</a><label class='richtig'><input type='checkbox' name='checkbox' value='Richtig'>True</label></div>");

    $(".adel").click(function() {
        $(this).closest(".newa").remove();
    });

});

你可以在这里查看我的代码: demo

【问题讨论】:

  • 你用的是哪个版本的jquery?
  • 请注意,delegate() 是一种非常过时的方法。 on() 被认为是更好的做法。
  • 根据文档As of jQuery 1.7, .delegate() has been superseded by the .on() method 来自documentation,您可以进一步阅读
  • @RoryMcCrossan 但 on() 也不起作用:(你能帮我写下你的例子吗:/

标签: jquery delegates append


【解决方案1】:

您还需要注册 .ansadd 事件..

$(".questions").on('click', '.qadd', function () {
    $(".questions").after("<div class='newq'><br><div><input placeholder='Question' type='text'/><a class='qdel' href='#'>-</a></div><div class='answers'><input placeholder='Answer' type='text'/><a class='ansadd' href='#'>+</a><label class='richtig'><input type='checkbox' name='checkbox' value='Richtig'>True</label></div></div>");
})

$(document).on('click', '.qdel', function () {
    $(this).closest(".newq").remove();
});
$(document).on('click', '.ansadd', function () {
    $(this).after('<span>Do Whatever you want to do</span>');
});



$(document).on('click', '.adel', function () {
    $(this).closest(".newa").remove();
});

【讨论】:

  • 感谢您的关注。我使用了另一种解决方案,它可以工作,但有一个功能错误。 create.az/extfiles/safe112/iframe/neue_test_2.html 在此页面中,当我单击“+”添加问题时,效果很好,但是当我想单击并向问题添加答案输入时,它会为每个问题生成 1x 答案。通常它应该只为一个问题生成答案。
  • 您可以使用上面的解决方案来实现这一点。添加您的 html 字符串并将其附加到 traget
【解决方案2】:

首先delegate() 是一种非常过时的方法。您应该改用on()。要解决您的问题,请将 click() 处理程序从委托中移出,并将它们也放入委托的事件处理程序中。试试这个:

$(".questions").on('click', '.qadd', function() {
    $(".questions").after("<div class='newq'><br><div><input placeholder='Question' type='text'/><a class='qdel' href='#'>-</a></div><div class='answers'><input placeholder='Answer' type='text'/><a class='ansadd' href='#'>+</a><label class='richtig'><input type='checkbox' name='checkbox' value='Richtig'>True</label></div></div>");    
})

$(document).on('click', '.qdel', function() {
    $(this).closest(".newq").remove();
});

$(".answers").on('click', '.ansadd', function() {
    $(".answers").first().after("<div class='newa'><input placeholder='Answer' type='text'/><a class='adel' href='#'>-</a><label class='richtig'><input type='checkbox' name='checkbox' value='Richtig'>True</label></div>");    
})

$(document).on('click', '.adel', function() {
    $(this).closest(".newa").remove();
});

请注意,为了获得最佳性能,您应该将上面示例中的$(document) 更改为最接近页面加载时出现在DOM 中的.adel.qdel 的父元素。我仅将其用作示例,因为您没有展示其他可以解决问题的元素。

【讨论】:

  • 感谢您的回答。我被复制并尝试了您的代码,但添加问题是工作答案添加不是:(
  • 我需要查看您的确切 HTML 才能诊断任何问题,但它似乎可以在这里进行测试:jsfiddle.net/RoryMcCrossan/csoo35rf
  • 我理解你的朋友,但我想在输入附近使用这个“+”、“-”按钮
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
相关资源
最近更新 更多