当前位置:  开发笔记 > 编程语言 > 正文

将javascript规则应用于克隆元素

如何解决《将javascript规则应用于克隆元素》经验,为你挑选了1个好方法。

每次用户点击"添加披萨"按钮时,我希望该页面生成另一个披萨形式并添加额外披萨的任何费用.我已经能够添加披萨形式,但没有任何添加规则应用于克隆元素.有任何想法吗?

HTML:

    
Pizza
Toppings (99p Each):   Onions Mushrooms Peppers Olives Garlic Peperoni Pesto

JavaScript的:

var pizzaCost = 0.00;
var toppingCost = 0.00;
var sideCost = 0.00;
var drinkCost= 0.00;
var desertCost = 0.00;
var desertSizeCost = 0.00;
var drinkSizeCost = 0.00;
var sideSizeCost = 0.00;

$("#pizzaSize").prop('disabled', true);

$("#pizza").change(function() {
    $("#pizzaSize").prop('disabled', false);
})

$( "#pizzaSize" ).change(function() {
    $("input[type='checkbox']").prop('disabled', false);
    var selectionPrice = $('option:selected', this).attr('id');
    var selectionInt = parseFloat(selectionPrice, 10);
    pizzaCost = selectionInt;
    calculateCost(pizzaCost, toppingCost, sideCost, drinkCost, desertCost, desertSizeCost, drinkSizeCost, sideSizeCost);
});

$('input[type=checkbox]').change(function(){
    var checked = $(":checkbox:checked").length;
    toppingCost = 0.99 * checked;
    calculateCost(pizzaCost, toppingCost, sideCost, drinkCost, desertCost, desertSizeCost, drinkSizeCost, sideSizeCost);
});

function calculateCost(pizzaCost, toppingCost, sideCost, drinkCost, desertCost, desertSizeCost, drinkSizeCost, sideSizeCost) {
    var total = pizzaCost + toppingCost + sideCost + drinkCost + desertCost + desertSizeCost + drinkSizeCost + sideSizeCost;
    $("#totalPrice").text(total.toFixed(2));
}

$( "#addPizza" ).click(function() {
  $("#pizzaForm").clone().appendTo("#extraPizza");
});

Shyju.. 5

您应该on在注册事件时使用jQuery 委派,以便它可以用于动态创建和注入的表单元素.

$(document).on("change","#pizzaSize", function() {
    $("input[type='checkbox']").prop('disabled', false);
    var selectionPrice = $('option:selected', this).attr('id');
    var selectionInt = parseFloat(selectionPrice, 10);
    pizzaCost = selectionInt;
    calculateCost(pizzaCost, toppingCost, sideCost, drinkCost, desertCost, desertSizeCost, 
                                                             drinkSizeCost, sideSizeCost);
});

此外,我发现您的代码存在一些问题.首先,你不应该在你的表单元素上保留Id,因为你正在制作克隆.此外,您不应使用Id使用jQuery选择来绑定事件.不超过一个元素应具有相同的Id.在元素上保留一些css类,您可以使用它来注册您的点击事件代码.也不要将价格保留在id属性值中.如果2件商品价格相同怎么办?相同的ID?这是不正确的.您应该将价格保留在HTML 5数据属性中.

您可以使用closest()方法获取父容器,然后使用find获取对相对大小下拉列表的引用.

$(document).on("change", ".pizza", function () {
    var _this = $(this);
    _this.closest("fieldset").find(".size").prop('disabled', false);

});

这是我提到的变化的工作样本.



1> Shyju..:

您应该on在注册事件时使用jQuery 委派,以便它可以用于动态创建和注入的表单元素.

$(document).on("change","#pizzaSize", function() {
    $("input[type='checkbox']").prop('disabled', false);
    var selectionPrice = $('option:selected', this).attr('id');
    var selectionInt = parseFloat(selectionPrice, 10);
    pizzaCost = selectionInt;
    calculateCost(pizzaCost, toppingCost, sideCost, drinkCost, desertCost, desertSizeCost, 
                                                             drinkSizeCost, sideSizeCost);
});

此外,我发现您的代码存在一些问题.首先,你不应该在你的表单元素上保留Id,因为你正在制作克隆.此外,您不应使用Id使用jQuery选择来绑定事件.不超过一个元素应具有相同的Id.在元素上保留一些css类,您可以使用它来注册您的点击事件代码.也不要将价格保留在id属性值中.如果2件商品价格相同怎么办?相同的ID?这是不正确的.您应该将价格保留在HTML 5数据属性中.

您可以使用closest()方法获取父容器,然后使用find获取对相对大小下拉列表的引用.

$(document).on("change", ".pizza", function () {
    var _this = $(this);
    _this.closest("fieldset").find(".size").prop('disabled', false);

});

这是我提到的变化的工作样本.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有