我正在从通过JavaScript创建的另一个div中附加一些HTML - 第一次附加HTML时一切正常,但是当我再次附加HTML时,它会添加内容两次,我猜是因为它附加了通过JS创建的两个div的HTML,如果我再次附加它,它会添加三个副本,然后是四个等。
我创建了一个JSFiddle来显示问题:https://jsfiddle.net/49q0369a/
1.(点击"每晚定价">
2.( 点击"季节性定价">
3.(单击"添加季节性价格过滤器",然后单击"添加价格规则"(此处一切正常(
4.(单击"添加季节性价格过滤器",然后再次单击"添加价格规则"(仍然正常工作(
5.(现在对于第一个"季节性过滤器#1",再次单击"添加价格规则",您将看到它添加了两个价格规则div而不是一个(这就是问题所在,应该始终只添加一个(
添加价格规则的函数:
function add_price_rule() {
$(".add-price-rule").on( "click", function() {
$(this).parent().find(".price-rule-wrapper-outer").append($(".price-rule-wrapper").html());
remove_price_rule();
recacluclate();
});
}
关于如何解决这个问题的任何方向赞赏!
选择Add seasonal price filter
时,将执行以下代码
$(".add-price-rule-season").on( "click", function() {
...
}
这会将事件侦听器添加到Add Price Rule
按钮。
再次选择Add seasonal price filter
时,新的事件侦听器将再次添加到"Add Price Rule
"按钮中。因此,现在有两个事件与按钮相关联。由于按钮上有两个事件(都指向相同的方法(,因此该方法将执行两次(因此添加了两个部分(。
这同样适用于其他按钮。为了证明这一点,我在这里的jsFiddle中添加了一些console.log
。选择Add Price Rule
多次(例如 3 次(,然后为每个规则选择"Remove Price filter
"。观察控制台。您将看到,当首次选择任何Remove Price Filter
时,该方法(事件(将执行一次。选择下一个remove
按钮时,事件将执行两次,依此类推。
我更喜欢使用 jQuery off 事件来解决这个问题。 相应的代码现在如下所示
$(".add-price-rule-season").off().on( "click", function() {
...
}
这在这里的jsFiddle中得到了证明。