2014-01-24 44 views
0

我在克隆字段集中的javascript函數中遇到麻煩。使用javascript函數在克隆字段中遇到問題

這是我的JS代碼:

$("a#add").click(function(){ 
    $('<fieldset class="articulos" id="'+ i +'"><input name="articulo[' + i + '][nombre]" id="art_nombre" value="" /><input name="articulo[' + i + '][cantidad]" class="art_cantidad" value="" /><input name="articulo[' + i + '][preciou]" class="art_preciou" value="" /><input name="articulo[' + i + '][descuento]" class="art_desc" value="" /><input name="articulo[' + i + '][precio]" class="art_precio" value="" /></fieldset> ').appendTo(".detalle"); 
    return false; 
    $('.detalle fieldset .art_cantidad, .detalle fieldset .art_preciou, .detalle fieldset .art_desc').on('input',function() { 
     var qty = parseInt($('.detalle fieldset .art_cantidad').val()); 
     var price = parseFloat($('.detalle fieldset .art_preciou').val()); 
     var desc = parseFloat($('.detalle fieldset .art_desc').val()); 
     if($('.detalle fieldset .art_desc').val()==''){ 
      $('.detalle fieldset .art_precio').val((qty * price ? qty * price : 0).toFixed(2)); 
     } else { 
      $('.detalle fieldset .art_precio').val(((qty * price ? qty * price : 0) - desc).toFixed(2)); 
     } 
    }); 

    i++; 


});  

這裏是我的html代碼:

<div class="detalle"> 
         <fieldset class="articulos" id="0"> 
          <input name="articulo[0][nombre]" id="art_nombre" value="nombre" /> 
          <input name="articulo[0][cantidad]" id="art_cantidad" value="" /> 
          <input name="articulo[0][preciou]" id="art_preciou" value="" /> 
          <input name="articulo[0][cantidad]" id="art_desc" value="" /> 
          <input name="articulo[0][precio]" id="art_precio" value="" readonly="readonly" /> 
         </fieldset> 
        </div> 
        <a id="add">Agregar</a> 

的問題是,當我克隆領域的功能僅適用於第一個字段集。我認爲這是因爲我沒有確定類名或類似的東西。

非常感謝。

這裏是我的jsfiddle:http://jsfiddle.net/8hsWu/2/

回答

0

您在這裏有幾個錯誤。

  1. 在委派。您需要

    $(".articulos").on("input", ":input", function(){ ... }); 
    
  2. 要創建一個使用相同ID的幾個元素的使用,你需要添加i將元素ID爲好。

  3. 你不確切指定你從哪些元素中取值。

    var qty = parseInt($('.detalle fieldset .art_cantidad').val()); 
    

這是錯誤的,不點你的確切元素。你需要做的是

var qty = parseInt($(this).parent().children(".art_candidat").val()); 

這適用於所有你的元素與價值。

所有這些你應該在$("#add").click()區域之外申請,並且只使用創建來創建新的字段集。

綜上所述所有值從.art_precio你可以這樣做:

var sum_precio = 0; 
$(".detalle").find(".art_precio").each(function(){ 
    sum_precio += parseInt(this.value); 
}); 

普通的JavaScript this.value工作速度遠遠超過$(this).val()和不一樣的。

+0

謝謝,這個做工精良。 – user2125943

+0

我如何添加所有類名爲「.art_precio」的字段? – user2125943

+0

什麼意思是「添加所有字段」?總結他們的價值? – Eternal1

0

的問題沒有得到很好的定義的類和ID應該是這樣的:

<input class="campo" name="articulo[0][cantidad]" id="art_cantidad0" value="" /> 

,這可能是解決

http://jsfiddle.net/n2h8a/