Javascript 计算Jquery中具有克隆行的两个字段

Javascript 计算Jquery中具有克隆行的两个字段,javascript,jquery,Javascript,Jquery,根据我在这里的截图: 第一行的附加项和选项工作正常,我使用PHP变量/计数器创建了这些函数 因此,当我克隆新行的附加项和选项时,我打算对Jquery和计数器执行相同的操作,如红色箭头所示,但不起作用 请查看此处运行的文件: })) 和有效,但仅在当前克隆行中有效,因此当克隆新行时,前一行无效。假设这两个元素在HTML中放置在同一层次结构上。将以下类添加到#priceoptc元素:priceElement,对于#qtyoptc元素有qtylement,对于#totaloptc元素使用totalEl

根据我在这里的截图:

第一行的附加项和选项工作正常,我使用PHP变量/计数器创建了这些函数

因此,当我克隆新行的附加项和选项时,我打算对Jquery和计数器执行相同的操作,如红色箭头所示,但不起作用

请查看此处运行的文件:

}))


和有效,但仅在当前克隆行中有效,因此当克隆新行时,前一行无效。

假设这两个元素在HTML中放置在同一层次结构上。将以下类添加到#priceoptc元素:priceElement,对于#qtyoptc元素有qtylement,对于#totaloptc元素使用totalElement类

然后使用以下代码:

$('#priceoptc'+opcionescant).keyup(function (event) {

    //calculate the total amount of this option
    var amountextra = 0;
    amountextra =((Number($(event.target).val()))*(Number($(event.target).siblings('.qtyElement').val())));
    $(event.target).siblings('.totalElement').val(amountextra);
});
请考虑HTML结构的假设。如果您的HTML结构比我假设的更复杂,请务必提及HTML结构。


var opcionescant=1;
var extrascant=1;
$(“#添加行10”)。单击(函数(){
opcionescant++;
var optrow=$(“#选项”).clone(true,true);
fixIds2(optrow,opcionescant);//将此计数器添加到当前id并替换为当前编号
optrow.附录(“表格”);
createopcion(opcionescant);
});
$(“#clonarextra”)。单击(函数(){
extrascant++;
var extrow=$(“#trextra”).clone(true,true);
fixIds2(extrow,extrascant);//将此计数器添加到当前id并替换为当前编号
如果(外部扫描==2){
外插式后缀(“#trextra”);
}否则{
extrow.insertAfter(“#trextra”+(extrascant-1));
}
createextra(外部扫描);
});
函数createopcion(i){
$('#priceoptc'+i).keyup(函数(){
//计算此选项的总金额
var-amountextra=0;
amountextra=(数字($('priceoptc'+i.val())*(数字($('priceoptc'+i.val())));
$('totaloptc'+i).val(数学圆整(amountextra));
});
$('#qtyopc'+i).keyup(函数(){
//计算此选项的总金额
var-amountextra=0;
amountextra=(数字($('priceoptc'+i.val())*(数字($('priceoptc'+i.val())));
$('totaloptc'+i).val(数学圆整(amountextra));
});
}
函数createextra(i){
$('#ext'+i).更改(函数(){
//============获取别墅价格------------------
var extraid=此.value;
$.ajax({
键入:“POST”,
url:'ajax/extradetails.php',
数据:{extraselected:extraid},
数据类型:“json”,
cache:false,
成功:功能(响应){
$('#priceext'+i).val(回复['sales']);
开关(响应['unit']){
案例“m2”:
var unithtml='m2';
//代码块
打破
案例“lm”:
var unithtml='lm';
//代码块
打破
案例“gl”:
var unithtml='gls';
//代码块
打破
案例“m3”:
var unithtml='m3';
//代码块
打破
案例“集合”:
var unithtml='set';
//代码块
打破
案例“pc”:
var unithtml='pc';
//代码块
打破
违约:
var unithtml='m2';
//代码块
}
$(“#funit”+i).html(unithtml);
$(#tunit+i).html(unithtml);
}
});
//得到这个额外的qtn
var-qtnextra=0;
qtnextra=Number($('#toext'+i).val())-Number($('#fromext'+i).val());
$('qtyext'+i).val(qtnextra.toFixed(2));
//计算这个额外的总数
var-amountextra=0;
amountextra=(数字($('qtyext'+i.val())*(数字($('priceext'+i.val())));
$('#totalext'+i).val(Math.round(amountextra));
//获取包括额外费用在内的总金额
var总和=0;
$('.price')。每个(函数(){
sum+=数字($(this.val());
});
$('#totalPrice').val(数学四舍五入(总和));
//得到包括折扣在内的总额
var-neto=0;
neto=Number($('.#totalPrice').val())-Number($('.discount').val());
$('#totalNet').val(Math.round(neto));
});
//数字更改时从和更新到
$('#fromext'+i).keyup(函数(){
//得到这个额外的qtn
var-qtnextra=0;
qtnextra=Number($('#toext'+i).val())-Number($('#fromext'+i).val());
$('qtyext'+i).val(qtnextra.toFixed(2));
//计算这个额外的总数
var-amountextra=0;
amountextra=(数字($('qtyext'+i.val())*(数字($('priceext'+i.val())));
$('#totalext'+i).val(Math.round(amountextra));
//获取包括额外费用在内的总金额
var总和=0;
$('.price')。每个(函数(){
sum+=数字($(this.val());
});
$('#totalPrice').val(数学四舍五入(总和));
//得到包括折扣在内的总额
var-neto=0;
neto=Number($('.#totalPrice').val())-Number($('.discount').val());
$('#totalNet').val(Math.round(neto));
});
$('#toext'+i).keyup(函数(){
//得到这个额外的qtn
var-qtnextra=0;
qtnextra=Number($('#toext'+i).val())-Number($('#fromext'+i).val());
$('qtyext'+i).val(qtnextra.toFixed(2));
//计算这个额外的总数
var-amountextra=0;
amountextra=(数字($('qtyext'+i.val())*(数字($('priceext'+i.val())));
$('#totalext'+i).val(Math.round(amountextra));
//获取包括额外费用在内的总金额
var总和=0;
$('.price')。每个(函数(){
sum+=数字($(this.val());
});
$('#totalPrice').val(数学四舍五入(总和));
//得到包括折扣在内的总额
var-neto=0;
neto=Number($('.#totalPrice').val())-Number($('.discount').val());
$('#totalNet').val(Math.round(neto));
});
}
//如果elem是克隆结构的父级,而cntr是您说要维护的计数器,则可以像下面这样修复该克隆结构中的所有ID:
功能fixIds(元素、cntr){
$(elem).find(“[id]”).add(elem).each(function(){
this.id=this.id+cntr;
})
}
//如果ID的末尾可能已经有一个克隆的编号,并且您希望替换该编号,则可以这样做:
功能fixIds2(元素,cntr){
$(elem).find(“[id]”).add(elem).each(function(){
this.id=this.id.replace(/\d+$/,“”)+cntr;
})
}
//删除表格
$("#addRow10").click(function(){
opcionescant++;
//$("#options").clone().appendTo("#tableqtn");
var optrow = $("#options").clone(true,true);
//fixIds(optrow, opcionescant);//add this counter to the current id as a string
fixIds2(optrow, opcionescant);//add this counter to the current id and replace with current number
optrow.appendTo("#tableqtn");
//alert(opcionescant);

$('#priceoptc'+opcionescant).keyup(function () {

        //calculate the total amount of this option
        var amountextra = 0;
        amountextra =((Number($('#priceoptc'+opcionescant).val()))*(Number($('#qtyoptc'+opcionescant).val())));
        $('#totaloptc'+opcionescant).val(amountextra);
    });

    $('#qtyoptc'+opcionescant).keyup(function () {

        //calculate the total amount of this option
        var amountextra = 0;
        amountextra =((Number($('#priceoptc'+opcionescant).val()))*(Number($('#qtyoptc'+opcionescant).val())));
        $('#totaloptc'+opcionescant).val(amountextra);
    });
$('#priceoptc'+opcionescant).keyup(function (event) {

    //calculate the total amount of this option
    var amountextra = 0;
    amountextra =((Number($(event.target).val()))*(Number($(event.target).siblings('.qtyElement').val())));
    $(event.target).siblings('.totalElement').val(amountextra);
});