2012-04-25 3 views
0

を必要と私が説明するために私がいる問題はかなり難しいですが、私は私が達成しようとしています何jsFiddle http://jsfiddle.net/6ms4T/1/jQueryの入力は、すべてのIDを更新し、1つだけでなくは

でそれを複製していることです'数量'テキストボックスを更新すると、別の場所に値を表示したいと思います(その下の「コストライン」と呼ばれるライン)。

基本的に、最初の入力ボックス(qty_item_1)を更新すると、その製品に関連するものではなく、「コストライン」のすべての(quant_)IDが更新されます。

function recalc(){ 

$("[id^=quant_]").text($("input[id^=qty_item_]").val()); 

等...

完全なコードはここにある:http://jsfiddle.net/6ms4T/1/

任意の助けをいただければ幸いです。

+0

あなたは、セレクタを簡単にするために、関連する要素間の共通クラスを共有する必要があります... – jorgebg

+0

私はasp.net VBを使用して、各入力ボックスに一意のIDを持っている必要がありますよ。 –

+0

同意しますが、クラスを追加して共通要素を選択し、jQueryコードを単純化することもできます。 – jorgebg

答えて

0

あなたが変更された要素のIDを検索し、あなたの計算の残りの部分で使用するために、それの数字の部分を抽出することができます。ここで私が変更とworking version側面がある:。

var uniqueOne = $(this).attr("id").match(/\d+/); 
$("[id^=quant_][id$="+uniqueOne+"]").text($("input[id^=qty_item_][id$="+uniqueOne+"]").val()); 

クリーン探して、コードされていないが、どのようなそれがないと、uniqueOneとquant_と終わりで始まるIDを見つけることです。あなたはおそらくこれらを凝縮することができますが、2つのセレクター(開始点と終了点)を組み合わせて強調表示します。

あなたには素晴らしいアイデアがたくさんあるようです。

編集

あなたのidのは、qty_item_で始まらない場合、あなたは別のセレクターを使用する必要があります。これの最も低い垂木はcontains selectorid*=blahです。

'総' のIDとバージョンを見つけるために、更新:http://jsfiddle.net/6ms4T/22/

編集

予想通り、以前jsfiddleは合計の更新を処理しませんでした。このアップデート版では、DOM要素がIDで検索されるすべてのケースを識別して混乱を減らす必要があります。ただし、これをリファクタリングする可能性が高い:http://jsfiddle.net/6ms4T/24/です。

EDIT

OPさんのタグ自分のIDに生成された様々な数字と文字を持っていたが、最終的な数字は、アンダースコアが先行しました。これにより、重要なIDは正規表現/\d+$/で見つかりました。他のポスターが示すように、これを解決する方法は複数あります。私は個人的にユーザーガジェットのが好きだった。

+0

これは私のコードでは機能しませんが、qty_item_idをctl00_EnquiryForm1_qty_item_から切り捨てました。私はそれが重要だとは思っていませんでしたが、あなたのコード内のIDを更新する何らかの理由で、これに関するアイデアは? @WebHippo; –

+0

; 'id^= qty_item_'は、id _starts with_' qty_item_'を意味します。実際に 'ctl00 ...'で始まっていれば、それは間違いなく見つかるでしょう。 'id * = qty_item'の代わりに[contains operator](http://api.jquery.com/attribute-contains-selector/)を使う必要があります。 – veeTrain

+0

これはこのjsFiddleでは動作しますが、私のASP形式では動作しませんこれは奇妙です。残念ながら、私は問題のページへのリンクを投稿する立場にいません。 @WebHippo; –

0

あなたは物事が比較的簡潔に、そしてidの数値コンポーネントを識別し、その後、セレクタの一部として、その番号を使用して、特定の要素にイベントを適用することができます。

var idNum = this.id.match(/\d+/); 
$("#quant_" + idNum).text($("#qty_item_" + idNum).val()); 

JS Fiddle demo

参考文献:

+0

動作しません...第2の数量は、最初の入力の値で更新されます。 – gabitzish

+0

ああ私はそれをもう一度見ます。 –

+0

@gabitzishあなたは正しいです、それは動作しません。次の数量が更新されるまで更新が遅れますが、同じ値が返されます。 –

1

入力に関する情報を保持する属性を追加します。最初の入力に値1を、2番目に2の属性 "rel"を追加し、li要素の権利IDを構築するためにこのrelを使用しました。ここで

更新作業jsFiddleです:http://jsfiddle.net/6ms4T/8/

0

recalc()関数の変更は次のようになります。

function recalc(e){ 
    var idx = $(e.target).attr('id').split('_').pop(); 
    $("[id^=quant_" + idx + "]").text($(e.target).val()); 

... }

+0

投稿されたすべてのアイデアのうち、これは自分のコードで動作しますが、開始時に '1'とターゲットを設定して評価するので、数量を更新すると1,10,11,12などが更新されます。 –

+0

入力ボックスのIDの最後の数字(qty_item_1、qty_item_2など)を使用して、数量を表示する関連テキストラベルを選択します。 – rt2800

+0

'qty_item_1'と' qty_item_2'だけで動作しますが、あなたのコードを私のものに移しているので、 'qty_item_1'と' qty_item_1'を更新するときに 'qty_item_'を2つ以上持っていますが、' qty_item_10'、 '' qty_item_11'、 'qty_item_12'など –

関連する問題