2012-04-25 68 views
0

我遇到的問題是相當困難的我解釋,但我在的jsfiddle複製它http://jsfiddle.net/6ms4T/1/jQuery的輸入更新所有的ID,而不僅僅是一個需要

我想實現是更新「數量」文本框,我想顯示其他地方的值(下面我將稱之爲「成本線」)。

基本上,更新第一個輸入框(qty_item_1)正在更新'成本行'中的所有(quant_)ID,而不僅僅是與該產品相關的一個。

function recalc(){ 

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

等等

全部代碼是在這裏:http://jsfiddle.net/6ms4T/1/

任何幫助,將不勝感激。

+0

你應該分享相關要素之間的公共類,以簡化選擇...... – jorgebg 2012-04-25 12:08:51

+0

我使用asp.net VB和需要有唯一的ID對每個輸入框。 – 2012-04-25 12:11:21

+0

同意,但您也可以添加類來選擇常用元素並簡化jQuery代碼。 – jorgebg 2012-04-25 12:28:48

回答

0

,可以看到正在改變的元素的ID,然後提取它的數字部分在你計算的休息使用。下面是我改的各個方面和working version

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

雖然不是最乾淨尋找代碼,它的作用是發現與quant_開始和結束uniqueOne的ID。你可能會壓縮這些,但它突出了結合兩個選擇器(開始與結束)。

看起來像你有很多偉大的想法可供選擇。

編輯

如果你的ID不qty_item_啓動,那麼你就需要使用不同的選擇。這個最低掛果實將是contains selectorid*=blah

更新版本的 '毛' IDS發現:http://jsfiddle.net/6ms4T/22/

編輯

以前的jsfiddle沒有處理的總更新預期。這個更新版本應該通過識別所有通過ID查找DOM元素的情況來減少混淆;然而,這應該被重構的可能性很高:http://jsfiddle.net/6ms4T/24/

編輯

OP的標籤產生了到他的ID各種數字和字母,但最終的數字是由一個下劃線開頭。重要的id因此在正則表達式/\d+$/中找到。正如其他海報所示,解決這個問題的方法不止一種。我個人喜歡用戶gabitzish的。

+0

這在我的代碼中不起作用,我從ctl00_EnquiryForm1_qty_item_中截取了qty_item_ id,因爲我認爲它不重要,但由於某種原因更新代碼中的ID以匹配我的代碼根本不起作用。有關於此的任何想法? – 2012-04-25 12:26:02

+0

@WebHippo; 'id^= qty_item_'表示id _starts with_' qty_item_'。如果它實際上以'ctl00 ...'開頭,那麼它肯定不會找到它。您可能需要使用[包含運算符](http://api.jquery.com/attribute-contains-selector/)來代替:'id * = qty_item' – veeTrain 2012-04-25 12:35:12

+0

它再次在此jsFiddle中工作,但不在我的asp窗體中,這很奇怪。不幸的是,我無法發佈鏈接到相關頁面的鏈接。 – 2012-04-25 13:05:18

0

可以讓事情比較簡潔,而且通過識別id的數字部分,然後使用該號碼作爲選擇的一部分應用於事件只有特定的元素:

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

JS Fiddle demo

參考文獻:

+0

它不起作用......第二個數量更新爲第一個輸入值。 – gabitzish 2012-04-25 12:09:10

+0

哦。我會再看看那個。 – 2012-04-25 12:12:11

+0

@gabitzish你是對的,它不起作用。它會延遲更新,直到下一個數量更新,但仍然返回相同的值。 – 2012-04-25 12:12:20

1

添加一個包含輸入信息的屬性。我爲第一個輸入添加了一個屬性「rel」,值爲1,第二個爲2,然後使用這個rel爲li元素構建正確的id。

這裏是一個更新工作的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等。 – 2012-04-25 12:24:33

+0

輸入框ID(如qty_item_1,qty_item_2)中的最後一個數字用於選擇要顯示數量的相關文本標籤。 – rt2800 2012-04-25 12:33:10

+0

我同意,它只適用於'qty_item_1'和'qty_item_2',但是將您的代碼轉換爲我的代碼,在更新'qty_item_1'後更新'qty_item_',然後'qty_item_1'更新,但'qty_item_10', qty_item_11','qty_item_12'等 – 2012-04-25 13:08:11

相關問題