1

私はこのコードを持っています-完璧に動作します

$('.canti,.precio').change(function() {
 var total = 0;
 var $item = $(this).parent();
 var canti = $item.find(".canti").val();
 var precio = $item.find(".precio").val();  
 total = parseFloat(canti * precio); 
 $item.find(".subto").attr("value", total); 
});

フィールドセットに基づいて計算を行います

<fieldset class="item">
<input name="item[]" type"text" value="" />
<input class="canti" name="cantidad[]" type"text" value="" />
<input class="precio" name="preciounitario[]" type"text" value="" />
<input class="subto" name="importe[]" type"text"value="" readonly="readonly"/>
</fieldset> 

私は複数の実際のフィールドセットを持っていて、それは完璧に機能しました。ただし、最初にXフィールドセットを用意するのではなく、ユーザーが必要に応じて追加できるようにしたかったので、次のように記述しました。

var newFieldset='<fieldset class="item"><input name="item[]" type"text" value="" /><input class="canti" name="cantidad[]" type"text"  value="" /><input class="precio" name="preciounitario[]" type"text"  value="" /><input class="subto" name="importe[]" type"text"value="" readonly="readonly"/></fieldset>'
$(".add").click(function(){
    $(".add").before(newFieldset);
});

繰り返しますが、完全に機能し、新しいフィールドセットを追加しますが、新しい「仮想」フィールドセットの.cantiおよび.precioアイテムの計算は何もしません。

何か案は?私がやりたいことは可能ですか?

http://www.cristalyaluminiodiestro.com/estimate-create-testingに、より完全なバージョンがあります。

4

2 に答える 2

2

イベントを委任する必要があります

jQuery.on()メソッドを使用できます

$('body').on('change','.canti,.precio' ,function() {

これは、イベントを追加する方法が、動的に作成された要素に対して機能しないためです。

'body'は、最も近い静的な親コンテナに置き換えることができます。

于 2012-12-15T00:06:25.633 に答える
2

はい、これは可能です。すべての祖先である要素にイベントハンドラーをアタッチする必要があります。これは、次onメソッドを使用して可能です。

$('body').on('change', '.canti,.precio', function() { ... });

これが当てはまるのは、変更ハンドラーが'.canti,.precio'DOM対応のフィルターを通過する要素にのみアタッチされているためです。動的に追加する要素は明らかに存在しないため、ハンドラーはアタッチされません。

上記の例では、body要素をすべての要素の共通の祖先として使用しました。可能な場合は、パフォーマンスの理由として、より近い共通の祖先を使用することをお勧めします。

于 2012-12-15T00:07:15.257 に答える